Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi urgh? Lesen Von Adresse 00000000 error bei... ??? (https://www.delphipraxis.net/11474-urgh-lesen-von-adresse-00000000-error-bei.html)

Skyruner2 7. Nov 2003 13:29


urgh? Lesen Von Adresse 00000000 error bei... ???
 
hi
Ich habe keine ahrnung warum ich diesen error habe....
Hier ist das exception fenster
nach dem error springt der de-bugger Hier hin

und der code (der macht noch net fiel)
error bei: button2click
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
openDialog1.Execute;
edit3.text:=opendialog1.FileName;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  filedata, datacontent : tStringlist;
  databegin, dataend :integer;
begin
If openDialog1.Filename = ''
then showmessage('no file loaded dumbass')
else
  begin
    try
      filedata.Create;
      try
        filedata.LoadFromFile(opendialog1.FileName);
      except
        on E: Exception do
          begin
            showmessage(e.Message);
          end;
      end;

      databegin:=filedata.IndexOf(edit1.Text);
      dataend:=filedata.IndexOf(edit2.Text);

    finally
      FreeAndNil(filedata);
      FreeAndNil(datacontent);
    end;
  end;
end;
hab ich wieder was falsch geschrieben??
wenn ich den error ignorire, un das programm weiterlaufen lasse, ist die gleich message in der showmessage nachricht.... also muss es an:
filedata.LoadFromFile(opendialog1.FileName);
liegen

ist auch wenn ich dass file zB in ein memo feld lade.

Nalincah 7. Nov 2003 13:34

Re: urgh? Lesen Von Adresse 00000000 error bei... ???
 
Delphi-Quellcode:
filedata.Create
= FALSCH
Delphi-Quellcode:
filedate := TStringList.Create;
= RICHTIG

und nicht

Delphi-Quellcode:
var
  filedate:TStringList;
sondern

Delphi-Quellcode:
var
  filedate:TStrings;

Nalincah 7. Nov 2003 13:36

Re: urgh? Lesen Von Adresse 00000000 error bei... ???
 
Würd das auch nicht so schreiben:

Delphi-Quellcode:
If openDialog1.Filename = ''
then showmessage('no file loaded dumbass')
else
  begin
    try
      filedata.Create;
      try
        filedata.LoadFromFile(opendialog1.FileName);
      except
        on E: Exception do
          begin
            showmessage(e.Message);
          end;
      end;

      databegin:=filedata.IndexOf(edit1.Text);
      dataend:=filedata.IndexOf(edit2.Text);

    finally
      FreeAndNil(filedata);
      FreeAndNil(datacontent);
    end;
  end;
Sonder so:

Delphi-Quellcode:
If openDialog1.Filename = '' then
begin
  showmessage('no file loaded dumbass');
end else
begin
  try
    filedata := TStringList.Create;
    try
      filedata.LoadFromFile(opendialog1.FileName);
    except
      on e : exception do
        showmessage(e.Message);
    end;
    databegin := filedata.IndexOf(edit1.Text);
    dataend := filedata.IndexOf(edit2.Text);
  finally
    filedate.free;
  end;
end;
So ist doch übersichtlicher, oder nicht?

Ausserdem, wofür brauchst du das "datacontent"??

Skyruner2 7. Nov 2003 13:38

Re: urgh? Lesen Von Adresse 00000000 error bei... ???
 
hmm.. kein error mehr :thuimb:

aber warum? :gruebel:

was ist denn der unterschied von Tstringlist und Tstrings??

Nalincah 7. Nov 2003 13:40

Re: urgh? Lesen Von Adresse 00000000 error bei... ???
 
Dein Fehler war das erstellen des Objektes:

wenn du ne StringList machen willst

dann so

Delphi-Quellcode:
var
  Liste:TStrings;
begin
  Liste := TStringList.Create;
  try
    // Code
  finally
    Liste.free;
  end;
end;

Luckie 7. Nov 2003 13:41

Re: urgh? Lesen Von Adresse 00000000 error bei... ???
 
Irgendwie hats du die try-finally, try except Blöcke komisch geschachtelt.
Delphi-Quellcode:
sl := TStringlist.Create;
try
  sl. ...;
  try
    sl.LoadfromFile(...);
  except
    ...;
  end;
finally
  sl.Free;
end;
Wobei ich auf den Except Block verzichten würde und mit FileExist prüfen würde, ob die Datei vorhanden ist. Nutz man allerdings einen Opendialog ist das überflüssig, weil man ihn so einstellen kann, dass er nur existierende Dateien akzeptiert.

Skyruner2 7. Nov 2003 13:43

Re: urgh? Lesen Von Adresse 00000000 error bei... ???
 
Zitat:

Zitat von Luckie
Irgendwie hats du die try-finally, try except Blöcke komisch geschachtelt.
Delphi-Quellcode:
sl := TStringlist.Create;
try
  sl. ...;
  try
    sl.LoadfromFile(...);
  except
    ...;
  end;
finally
  sl.Free;
end;
Wobei ich auf den Except Block verzichten würde und mit FileExist prüfen würde, ob die Datei vorhanden ist. Nutz man allerdings einen Opendialog ist das überflüssig, weil man ihn so einstellen kann, dass er nur existierende Dateien akzeptiert.

war auch nur für de-bugging gedacht ;)

Nalincah 7. Nov 2003 13:43

Re: urgh? Lesen Von Adresse 00000000 error bei... ???
 
Entweder so:

Delphi-Quellcode:
If FileExists(opendialog1.filename) then
  memo1.lines.loadfromfile(opendialog1.filename);
oder

Delphi-Quellcode:
if opendialog1.execute then
  memo1.lines.loadfromfile(opendialog1.filename);
Beim ersten wird das nur gemacht wenn die datei vorhanden ist
und beim zweiten wird das nur gemacht wenn im opendialog auf "Öffnen" geklickt wird. Und das geht nur wenn die datei vorhanden ist

Minz 7. Nov 2003 13:46

Re: urgh? Lesen Von Adresse 00000000 error bei... ???
 
Bei TStrings handelt es sich lediglich um eine Klasse, die zwar Methoden angemeldet hat aber diese nicht selber implementiert -> abstrakte Basisklasse. (siehe Online-Hilfe)

TStringList ist ein Abkömmling von TStrings und implementiert die Methoden und Eigenschaften.

Gruß Minz

Nalincah 7. Nov 2003 13:47

Re: urgh? Lesen Von Adresse 00000000 error bei... ???
 
Cool..So genau wusst ich das auch noch nicht

Skyruner2 7. Nov 2003 13:52

Re: urgh? Lesen Von Adresse 00000000 error bei... ???
 
cool danke!

choose 7. Nov 2003 13:56

Re: urgh? Lesen Von Adresse 00000000 error bei... ???
 
Zitat:

Zitat von General2003
Würd das auch nicht so schreiben:
[...]
Sonder so:
[...]
So ist doch übersichtlicher, oder nicht?

Hallo Herr General,

Charles Calvert hat in seinem Artikel Object Pascal Style Guide den Quasi-Standard, der auch innerhalb der VCL-/CLX-Quellen etc. verwendet wird, dokumentiert.

Zumindest die beteiligten des Jedi-Projekts achten auf diese Konvention und machen das Verstehen das Codes somit insgesamt einfacher.
Fragen nach dem ästhetischtem Indent, Caps oder Statement sollten demnach überdacht werden, weil die Praxis zeigt, das ein konformer Stil der allgemeinen Lesbarkeit zuträglich ist.

Nalincah 7. Nov 2003 14:06

Re: urgh? Lesen Von Adresse 00000000 error bei... ???
 
Ohne das jetzt alles durchzulesen..Entsprach mein Code diesen Konventionen?

choose 7. Nov 2003 14:14

Re: urgh? Lesen Von Adresse 00000000 error bei... ???
 
Ohne ins Detail zu gehen: Nein ;)

Nalincah 7. Nov 2003 14:15

Re: urgh? Lesen Von Adresse 00000000 error bei... ???
 
Mhhh.Schade..Dann werd ich mir das mal durchlesen

Phoenix 7. Nov 2003 14:16

Re: urgh? Lesen Von Adresse 00000000 error bei... ???
 
Zitat:

Zitat von choose
Charles Calvert hat in seinem Artikel Object Pascal Style Guide den Quasi-Standard, der auch innerhalb der VCL-/CLX-Quellen etc. verwendet wird, dokumentiert.

Zumindest die beteiligten des Jedi-Projekts achten auf diese Konvention und machen das Verstehen das Codes somit insgesamt einfacher.
Fragen nach dem ästhetischtem Indent, Caps oder Statement sollten demnach überdacht werden, weil die Praxis zeigt, das ein konformer Stil der allgemeinen Lesbarkeit zuträglich ist.

Wobei prinzipiell jeder StyleGuide mindestens einen wenn nicht mehr Punkte hat, bei dem sich die Geister ganz grob scheiden.

Gerade in diesem StyleGuide machen sie den grössten Fehler den ich mir beim Code-Layout vorstellen kann: fixe Spaces als Einrückung anstelle von Tabs. Das Problem ist, daß zwei Spaces dem einen Entwickler zu wenig, dem anderen genau richtig un dem dritten zu viel Einrückung sind. Mit Tabs hat man an der Stelle nur ein Zeichen, und jeder kann in seiner IDE selber einstellen, wie weit ein einzelner Tab einrücken soll.

Das gibt dem Entwickler sein eigenes Gefühl von korrekter Einrückung, ohne daß er anderen die am gleichen Code arbeiten müssen seine bevorzugte Einrückung vorschreibt.

Wichtig ist aber auf jeden Fall: Nur eine Art von Einrückung: Space oder Tabs, nie beides in der gleichen Datei oder genauso schlimm im gleichen Projekt durcheinander verwenden.

Luckie 7. Nov 2003 14:20

Re: urgh? Lesen Von Adresse 00000000 error bei... ???
 
TABs haben den Nachteil, das sich jedes mal, wen ich einen Quellcode öffne die TAB Weite einstellen muss, sonst kann es passieren, dass ich bei manchen Quelltexten drei Kilometer horizontal scrollen muss. Und Mit TABS Copy and Paste wo anders rein (Notepad), geht meist auch schief.

Des wegen habe ich einen Code-Formnatieren installiert. Bekomme ich so unleserliche Quelltexte, wird der einmal drübergejagt und gut is'.

Nalincah 7. Nov 2003 14:28

Re: urgh? Lesen Von Adresse 00000000 error bei... ???
 
Wo kriegt man den Code-Formatierer her?

choose 7. Nov 2003 14:29

Re: urgh? Lesen Von Adresse 00000000 error bei... ???
 
Zitat:

Zitat von Phoenix
Wobei prinzipiell jeder StyleGuide mindestens einen wenn nicht mehr Punkte hat, bei dem sich die Geister ganz grob scheiden.

Mit Sicherheit. Ich persönlich kann Charles in vielen Punkten nicht zustimmen, wenn er behauptet, der Code würde an lesbarkeit gewinnen. Doppeldeutigkeiten und zu häufiges Nachschlagen in der Deklaration eines Identifiers sind die Folge.

Trotzdem scheinen diese Konventionen eine weite Verbreitung zu haben, wie auch die Pascal-Syntax von vielen verwendet wird. Man kann sich streiten, ob es nicht irgendwo Schwächen in der einen oder anderen Form gibt.
Aber eigene Dialekte auszubilden und gleiche Dinge womöglich anders zu interpretieren ist nach meiner Ansicht kontraproduktiv.

Luckie 7. Nov 2003 14:40

Re: urgh? Lesen Von Adresse 00000000 error bei... ???
 
Ich habe bis jetzt noch keine Nachteile bei Clavert gefunden. Deswegen versuche ich mich auch an seinen StyleGuide zu halten. Aber es wird langsam offtopic.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:58 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz