Autor Beitrag
AlffromMelmac
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 24



BeitragVerfasst: Di 03.01.06 13:29 
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

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

ausblenden 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 user profile iconGausi: Beitragsformatierung überarbeitet.
matze.de
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 576

Win95, Win98 SE, WinXp Prof SP2
D7P, D8P, FPC2.0
BeitragVerfasst: Di 03.01.06 13:35 
Man könnte es so machen:
ausblenden 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

_________________
si tacuisses, philosophus mansisses.


Zuletzt bearbeitet von matze.de am Di 03.01.06 13:40, insgesamt 2-mal bearbeitet
Martin1966
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1068

Win 2000, Win XP
Delphi 7, Delphi 2005
BeitragVerfasst: 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:
ausblenden 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

_________________
Ein Nutzer der Ecke ;-)
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8548
Erhaltene Danke: 477

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Di 03.01.06 13:39 
Hallo und :welcome: in der Entwickler-Ecke!

Du musst beim Speichern die Reihenfolge umdrehen:
ausblenden 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;    
//entsprechend zeile2, zeile3

  sl := TStringList.Create;    
  sl[1] := zeile1;    
// usw.

// Dann speichern
  sl.savetoFile (SaveDialog1.Filename) ;    

// dann wieder freigeben
  sl.Free;    
end;    
end;    
end;

_________________
We are, we were and will not be.
Martin1966
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1068

Win 2000, Win XP
Delphi 7, Delphi 2005
BeitragVerfasst: Di 03.01.06 13:49 
user profile iconGausi hat folgendes geschrieben:
ausblenden Delphi-Quelltext
1:
2:
3:
  sl := TStringList.Create;
  sl[1] := zeile1;    
// usw.

Das wird wohl zu eimem Fehler führen.

Besser so:
ausblenden Delphi-Quelltext
1:
2:
3:
  sl := TStringList.Create;
  sl.Add (zeile1);
// usw.


lg Martin

_________________
Ein Nutzer der Ecke ;-)
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8548
Erhaltene Danke: 477

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Di 03.01.06 14:02 
Hmm. Da könntest du Recht haben. Da war ich mit meiner Fehlerkorrektur wohl etwas voreilig.

_________________
We are, we were and will not be.
Martin1966
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1068

Win 2000, Win XP
Delphi 7, Delphi 2005
BeitragVerfasst: 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

_________________
Ein Nutzer der Ecke ;-)
AlffromMelmac Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 24



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1068

Win 2000, Win XP
Delphi 7, Delphi 2005
BeitragVerfasst: Di 03.01.06 15:13 
user profile iconAlffromMelmac 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.

user profile iconAlffromMelmac 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:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
SL.Add (Edit1.Text);  // Edit1.Text = 'Zeile1'
SL.Add (Edit2.Text);  // Edit1.Text = 'Zeile2'
SL.Add (Edit3.Text);  // Edit1.Text = ''
SL.Add (Edit4.Text);  // Edit1.Text = 'Zeile4'
SL.Add (Edit5.Text);  // Edit1.Text = 'Zeile5'

Dann sieht die Datei die du anschl. erstellst so aus:
ausblenden 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

_________________
Ein Nutzer der Ecke ;-)
AlffromMelmac Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 24



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