Autor Beitrag
spoof
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 48



BeitragVerfasst: Mi 16.10.13 14:30 
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.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
 private
    { Private-Deklarationen }
    loadedfile:TStringList;
  public
    { Public-Deklarationen }
  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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2622
Erhaltene Danke: 1447

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: Mi 16.10.13 14:34 
Hallo,
Du hast vergessen die Stringliste zu erzeugen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
if OD_File.Execute then
  begin
    ED_File.Text:=OD_File.FileName;
    loadedfile:=tstringlist.create;    //erzeugen
    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

_________________
Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein

Für diesen Beitrag haben gedankt: spoof
spoof Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 48



BeitragVerfasst: 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:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2622
Erhaltene Danke: 1447

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: Mi 16.10.13 15:04 
Hallo,
user profile iconspoof hat folgendes geschrieben Zum zitierten Posting springen:

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:
ausblenden 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

_________________
Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein

Für diesen Beitrag haben gedankt: spoof
baumina
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 305
Erhaltene Danke: 61

Win 7
Delphi 10.2 Tokyo Enterprise
BeitragVerfasst: 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.

ausblenden 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.

ausblenden 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
    { Private-Deklarationen }
    loadedfile : TStringList;
  public
    { Public-Deklarationen }
  end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  loadedfile := TStringList.Create;  
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  loadedfile.Free;
end;