Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Mit Savedialog bestimmte Zeilen in txt Datei speichern
AlffromMelmac - Di 03.01.06 13:29
Titel: Mit Savedialog bestimmte Zeilen in txt Datei speichern
Hallo,
ich bin Delphi Anfänger und ich häng gerade an einem Problem;
Ich möchte mit dem Savedialog div. Edits in bestimmte Zeilen einer txt-File speichern;
(--> Habs über Actionlist und über Savedialog probiert);
Kann das Prog auch starten, betätige den entsprechenden Button und das Prog zeigt das Fenster an wohin ich die Datei haben will und wie sie heißen soll (Standard-Fenster halt); Alledings wenn ich speichern will, dann meldet er nach der Speicherung Listenindex überschreitet Maximum (1); Sieht jdm. meinen Fehler? Ich wollte schauen dass es ohne die add-Methode (z.B. add. edit1)b geht; Kann mir jdm. weiterhelfen?
Vielen Dank im Voraus,
P.S.: Noch der Quellcode der entsprechenden Stelle
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| procedure TForm2.SaveExecute(Sender: TObject); var sl: TStrings; zeile1, zeile2, zeile3 : string;
begin if savedialog1.Execute then begin if Savedialog1.FileName <> '' then begin sl:= TStringList.Create; zeile1:= sl [1]; zeile2:= sl [2]; zeile3:= sl [3]; sl.Free; edit1.Text:= zeile1; edit2.Text:= zeile2; edit3.Text:= zeile3; sl.savetoFile (SaveDialog1.Filename) ; end; end; end; |
zum Vergleich:
mit opendialog funktionierts;
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23:
| procedure TForm2.OeffnenExecute(Sender: TObject); var s: TStrings; zeile1, zeile2, zeile3 : string;
begin If Opendialog1.Execute then begin if Fileexists (Opendialog1.FileName) then begin
s:= TStringList.Create; s.LoadFromFile (OpenDialog1.Filename) ; zeile1:= s [1]; zeile2:= s [2]; zeile3:= s [3]; s.Free; edit1.Text:= zeile1; edit2.Text:= zeile2; edit3.Text:= zeile3; end; end; end; |
Moderiert von
Gausi: Beitragsformatierung überarbeitet.
matze.de - Di 03.01.06 13:35
Man könnte es so machen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| Procedure TForm1.Save(AFileName: String); Var IO: TextFile; Begin AssignFile(IO, AFileName); ReWrite(IO); Try WriteLn(IO, 'Hallo'); WriteLn(IO); WriteLn(IO, 'Die ist ein Text in einer Textdatei.'); Finally CloseFile(IO); End; End; |
Hoffe ich hab keine Fehler.
mfg matze
Martin1966 - Di 03.01.06 13:37
Hallo! :wink2: Willkommen im Delphi-Forum!
Hast du mal genau geschaut was die Funktion SaveExecute macht? Die hast du wohl von der Load Procedure kopiert. ;-)
Ich markiere mal die Stellen die falsch sind:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| procedure TForm2.SaveExecute(Sender: TObject); var sl: TStrings; zeile1, zeile2, zeile3 : string; begin if savedialog1.Execute then begin if Savedialog1.FileName <> '' then begin sl:= TStringList.Create; zeile1:= sl [1]; zeile2:= sl [2]; zeile3:= sl [3]; sl.Free; edit1.Text:= zeile1; edit2.Text:= zeile2; edit3.Text:= zeile3; sl.savetoFile (SaveDialog1.Filename) ; end; end; end; |
Weist du was du falsch gemacht hast?
Lg Martin
Gausi - Di 03.01.06 13:39
Hallo und :welcome: in der Entwickler-Ecke!
Du musst beim Speichern die Reihenfolge umdrehen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25:
| procedure TForm2.SaveExecute(Sender: TObject); var sl: TStrings; zeile1, zeile2, zeile3 : string;
begin if savedialog1.Execute then begin if Savedialog1.FileName <> '' then begin zeile1 := edit1.Text;
sl := TStringList.Create; sl[1] := zeile1;
sl.savetoFile (SaveDialog1.Filename) ;
sl.Free; end; end; end; |
Martin1966 - Di 03.01.06 13:49
Gausi hat folgendes geschrieben: |
Delphi-Quelltext 1: 2: 3:
| sl := TStringList.Create; sl[1] := zeile1; | |
Das wird wohl zu eimem Fehler führen.
Besser so:
Delphi-Quelltext
1: 2: 3:
| sl := TStringList.Create; sl.Add (zeile1); |
lg Martin
Gausi - Di 03.01.06 14:02
Hmm. Da könntest du Recht haben. Da war ich mit meiner Fehlerkorrektur wohl etwas voreilig.
Martin1966 - Di 03.01.06 14:34
Macht ja nichts.
Deine Hauptaussage: "Du musst beim Speichern die Reihenfolge umdrehen" war ja entscheidend um das Problem zu lösen. ;-)
Lg Martin
AlffromMelmac - Di 03.01.06 14:46
Danke euch, für die schnelle Antwort;
Aber wird bei sl.Add(Zeile1) nicht nur der Inhalt von Edit1,2,3, usw. untereinander je in eine Zeile geschrieben also angehängt?
Gäbe es hier eine Möglichkeit dass z.B. edit15 klar definiert ist als Zeile 15 im Textdokument? So ähnlich wie der opendialog Vorgang (s.o.);
Grüße
Martin1966 - Di 03.01.06 15:13
AlffromMelmac hat folgendes geschrieben: |
Aber wird bei sl.Add(Zeile1) nicht nur der Inhalt von Edit1,2,3, usw. untereinander je in eine Zeile geschrieben also angehängt? |
Ja.
AlffromMelmac hat folgendes geschrieben: |
Gäbe es hier eine Möglichkeit dass z.B. edit15 klar definiert ist als Zeile 15 im Textdokument? |
Genauso ist es auch. Wenn Du folgendes schreibst:
Delphi-Quelltext
1: 2: 3: 4: 5:
| SL.Add (Edit1.Text); SL.Add (Edit2.Text); SL.Add (Edit3.Text); SL.Add (Edit4.Text); SL.Add (Edit5.Text); |
Dann sieht die Datei die du anschl. erstellst so aus:
Quelltext
1: 2: 3: 4: 5:
| Zeile1 Zeile2
Zeile4 Zeile5 |
Wie du siehst, ist trotz des leeren Edit3 Feldes in Zeile 4 und 5 der richtige Eintrag aus den Edit-Felder 4 und 5.
Lg Martin
AlffromMelmac - Di 03.01.06 15:26
Ok, super; Danke dir; "Programmier" grad mal 2 Wochen oderso, drum hab brauch ich manchmal länger ;-)
Also danke,
Grüße,
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!