Entwickler-Ecke
Dateizugriff - Inhalt einer Textdatei in eine variable speichern
spoof - Mi 16.10.13 14:30
Titel: Inhalt einer Textdatei in eine variable speichern
Hallo, ich versuche eine Txt Datei einzulesen über ein Editfeld, der Inhalt soll in eine Variable gespeichert werden um so den Inhalt der Txt zu bearbeiten und bestimmte Dinge später in einer Tabelle auszugeben.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| private loadedfile:TStringList; public end;
procedure TForm1.ED_FileChange(Sender: TObject); begin
if OD_File.Execute then begin ED_File.Text:=OD_File.FileName; loadedfile.LoadFromFile(OD_File.FileName); end; |
Mein Problem ist, wenn ich die txt nun anklicke und reinladen will bringt er mir einen Fehler.
Der Fehler tritt in dieser Zeile auf:
Delphi-Quelltext
1:
| loadedfile.LoadFromFile(OD_File.FileName); |
Ich habe bisher noch nie mit TStringList gearbeitet und weiß nicht ob dort vllt der Fehler liegt.
Die Txt hat btw mehrere Tausend Zeilen, ka ob das eine Rolle spielt.
Kann mir wer sagen wie ich es hin bekomme den Inhalt der Txt in eine Variable zu bekommen?
Mathematiker - Mi 16.10.13 14:34
Hallo,
Du hast vergessen die Stringliste zu erzeugen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| if OD_File.Execute then begin ED_File.Text:=OD_File.FileName; loadedfile:=tstringlist.create; loadedfile.LoadFromFile(OD_File.FileName); end; |
Natürlich wirst Du die Stringliste am Ende, wenn Du sie nicht mehr brauchst, auch wieder mit loadedfile.free freigeben müssen.
Beste Grüße
Mathematiker
spoof - Mi 16.10.13 14:49
Vielen dank, funktioniert.
Noch eine Frage zum freigeben, es wird in meinem Edit eingelesen, ich arbeite damit im Code des Buttons und in den füge ich noch ein:
Delphi-Quelltext
1: 2: 3: 4: 5:
| try ->>>>>>>>mein code<......
finally loadedfile.free; |
Stimmt das so?
Btw was genau macht das freigeben und warum muss man das createn versteh ich auch nicht, ich hab doch in private eine variable erstellt?!
Mathematiker - Mi 16.10.13 15:04
Hallo,
spoof hat folgendes geschrieben : |
Noch eine Frage zum freigeben, es wird in meinem Edit eingelesen, ich arbeite damit im Code des Buttons und in den füge ich noch ein:
Delphi-Quelltext 1: 2: 3: 4: 5:
| try ->>>>>>>>mein code<......
finally loadedfile.free; | |
Sieht gut aus. Das müsste funktionieren.
TStringlist ist eine Klasse von der Du ein Objekt erzeugen musst. Das geschieht mit create.
TStringList wird in einigen Komponenten der VCL verwendet, z.B. im TMemo. Bei der Verwendung von VCL-Klassen, z.B. eben TMemo, wird create automatisch ausgeführt. In Deinem Fall, wenn Du eine eigene Variable festlegst, musst Du Dich selbst kümmern.
Jedes Objekt, dass Du selbst herstellst, musst Du auch mit free wieder freigeben, ansonsten drohen Speicherlecks.
Beste Grüße
Mathematiker
baumina - Mi 16.10.13 15:14
Wenn du eine Variable ausschließlich innerhalb einer procedure verwendest, macht es Sinn, diese auch nur dort lokal zu deklarieren.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| procedure TForm1.ED_FileChange(Sender: TObject); var loadedfile : TStringList;
begin loadedfile := TStringList.Create; .... loadedfile.Free; end; |
Wird diese Variable im ganzen Formular benötigt, deklarierst du diese in deinem TForm. Bezeichnet diese Variable ein Objekt, macht es Sinn ein create innerhalb von FormCreate und ein free innerhalb von FormDestroy aufzurufen.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); private loadedfile : TStringList; public end;
procedure TForm1.FormCreate(Sender: TObject); begin loadedfile := TStringList.Create; end;
procedure TForm1.FormDestroy(Sender: TObject); begin loadedfile.Free; end; |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!