Entwickler-Ecke

Dateizugriff - Strings speichern


theoneandonly - Mi 07.06.06 22:27
Titel: Strings speichern
Hallo, ich bins wieder ;)

Ich hab (wieder mal) ein (für andere ist es wahrscheinlich keins) Problem.
Ich habe einen String, den ich speichern und laden möchte.
Dazu 2 Fragen:

1. Wie speichere ich einen String, egal in welches Format, Hauptsache ich kann ihn wieder auslesen, ohne über einen Speicherdialog zu gehen (Dateiname name.***)?

2. Wie speichere ich in das Verzeichnis des Programms, wenn ich den Pfad nicht kenne?

Danke schonmal!


mkinzler - Mi 07.06.06 22:29

Zitat:
1. Wie speichere ich einen String, egal in welches Format, Hauptsache ich kann ihn wieder auslesen, ohne über einen Speicherdialog zu gehen (Dateiname name.***)?

IniFile, TRegistry, TextFile
Zitat:
2. Wie speichere ich in das Verzeichnis des Programms, wenn ich den Pfad nicht kenne?
ExtractFilePath( Application.ExeName) liefret dir das Verzeichnis, in dem die Anwendung liegt.


theoneandonly - Mi 07.06.06 23:07

So, ich hab dabei jetzt folgendes Problem:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
procedure TProgram.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
 sl:= TStringList.Create;
  try
  sl [1]:=inttostr(aufgaben);
  sl [2]:=inttostr(richtig);
  sl [3]:=inttostr(falsch);
  sl [4]:=inttostr(ngk);
  sl [5]:=inttostr(zeit);
  sl.SaveToFile(ExtractFilePath(Application.ExeName)+'\'+name+'.dat');
  finally
  sl.Free;
  end;
end;


Dann krieg ich ne Fehlermeldung 'ListBox Index out of bounds' oder so.


Andreas L. - Mi 07.06.06 23:16

Hi,
erstmal
user profile icontheoneandonly hat folgendes geschrieben:


Delphi-Quelltext
1:
  sl.SaveToFile(ExtractFilePath(Application.ExeName)+'\'+name+'.dat'); //das hervorgehobene muss weg; extractfilepath fügt automatisch ein \ hinzu                    



Die Frage ist was du dir bei den folgenden Code gedacht hast:

Delphi-Quelltext
1:
2:
3:
4:
5:
  sl [1]:=inttostr(aufgaben);
  sl [2]:=inttostr(richtig);
  sl [3]:=inttostr(falsch);
  sl [4]:=inttostr(ngk);
  sl [5]:=inttostr(zeit);


Sind das in den Klammern Integer-Variablen? Was soll das sl [2]? Mir ist so ein Syntax nicht bekannt und es wird auch wahrscheinlich so nicht gehen. sl.add('blubb'); ist wohl das was du suchst.

Ciao


theoneandonly - Mi 07.06.06 23:21

Hab ich auch gemerkt, habs nochmal geändert, jetzt siehts so aus und funktioniert soweit:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
procedure TBruchrechentrainer.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
 sl:= TStringList.Create;
  try
  sl.Add(inttostr(aufgaben));
  sl.Add(inttostr(richtig));
  sl.Add(inttostr(falsch));
  sl.Add(inttostr(ngk));
  sl.Add(inttostr(zeit));
  sl.SaveToFile(ExtractFilePath(Application.ExeName)+'\'+user+'.txt');
  finally
  sl.Free;
  end;
end;


Die erzeugte Datei hat z.B. diesen Inhalt:

8
1
6
1
6790

Wie les ich den wieder aus und weis den Variablen wieder ihre Werte zu?


Lannes - Mi 07.06.06 23:58

Hallo,

na, eben andersrum :wink:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
 sl:= TStringList.Create;  
  try
  sl.LoadFromFile(ExtractFilePath(Application.ExeName)+'\'+name+'.dat');    
  aufgaben := StrToInt(sL[0]);  
  richtig  := StrToInt(sL[1]);
  //...
  finally  
  sl.Free;  
  end;


theoneandonly - Do 08.06.06 00:12

ja, danke, jetzt funzt alles.