Autor Beitrag
FredAffe
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Do 27.06.02 13:39 
Hilo alle!

Ich versuche gerade, Delphi klar zu machen, dass es einen Wert (z.B. edit1.text) in eine Datei speichert, und wenn diese nicht da ist, sie zuerst erstellt. Wie kann ich ihm das beibringen? Wie kann ich die datei und den string-wert dann wieder laden?

_________________
Boh schon so spät...
Ich muss weg!
Klabautermann
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: Do 27.06.02 14:21 
Hallo,

Hier mal als beispiel, für genaue erklärungen einfach mal in die Online-Hilfe gucken ;).

ausblenden volle Höhe 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:
26:
27:
28:
29:
30:
31:
procedure WirteToFile(aFileName, aText : STRING);
  VAR
    f : TextFile;
BEGIN
  AssignFile(f, aFileName);
  IF FileExists(aFileName) THEN
    Append(f)
  ELSE
    Rewrite(f);
  WriteLn(f, aText);
  CloseFile(f);
END; // Wirte To File

function ReadFromFile(aFileName : STRING) : STRING;
  VAR
    f : TextFile;
    ActLine : STRING;
BEGIN
  RESULT := '';
  IF FileExists(aFileName) THEN BEGIN
    AssignFile(f);
    Reset(f);
    While NOT EOF(f) DO BEGIN
      ReadLn(f, ActLine);
      IF Result <> '' THEN
        Result := Result + #13#10;
      Result := Result + ActLine;
    END; // Bis zum Dateiende
    CloseFile(f);
  END; // Datei Existiert
END; // ReadFromFile


Die erste Procedure schreibt einen Sting in die angegebene Datei. Ist diese vorhanden wird der Text an den bestehenden angehängt. Exestiert sie nicht wird sie angelegt. Der übergebene FileName muss den kompletten Pfad und den Dateinen enthalten.

Die zwiete Funktion Liest alle Zeilen aus einer Datei und liefed diese als String zurück. Sind mehr als eine Zeile enthalten werden Zeilenumbrüche in den Ergebnisstring eingefügt.

Das ganze habe ich eben hier im Browser getippt also musst du unter Umständen den einen oder anderen Tippfehler korrigieren.

Verbesungsvorschlag: Die sicherheit dieser Methoden kann durch weiter Fehlerabfänge erhöht werden siehe hierzu IORESULT und TRY EXCEPT.

Gruß
Klabautermann
FredAffe Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Do 27.06.02 16:41 
Danke erstmal, funktioniert schon recht gut.
Nur möchte ich jetzt nicht, dass er die Strings hintendranhängt, sondern ersetzt, so dass immer nur ein wert drinstehen kann.

_________________
Boh schon so spät...
Ich muss weg!
Klabautermann
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: Do 27.06.02 18:18 
Hi,

dann ersetze
ausblenden Quelltext
1:
2:
3:
4:
IF FileExists(aFileName) THEN
  Append(f)
 ELSE
  Rewrite(f);


durch

ausblenden Quelltext
1:
Rewrite(f);					


Kleiner Tip. Wenn du solche Beispiele bekommst solltest du versuchen sie zu verstehen. Wenn du dir in der Online Hilfe mal die Befehle welche in den Beispielen vorkommen angeschaut hättest währest du leicht drauf gekommen. Schneller als hier zu Posten ist das auf jeden Fall ;).

Verstehe mich nicht falsch du darfst und sollst hier Posten und ich erkläre dir auch gerne was ich dir geschickt habe und wie du es abwandeln kannst, aber der Lernerfolg für dich ist größer wenn du dir das ganze erarbeitest.

Also nochmal, das ist nicht böse gemeint.

Gruß
Klabautermann
Steffer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 299



BeitragVerfasst: Fr 28.06.02 13:33 
Oder kürzer:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
var LB : TStringList;
begin
LB:= TStringList.Create;
LB.Add(Edit1.Text);
LB.SaveToFile(DeinFile);
LB.Free;
end;


var LB : TStringList;
begin
LB:= TStringList.Create;
LB.LoadFromFile(DeinFile);
Edit.Text:= LB.Text;
LB.Free;
end;


Code-Tags hinzugefügt. Tino

_________________
Keine Signatur ...
Klabautermann
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: Fr 28.06.02 14:41 
Hi Steffer,

das ist zwar kürzer aber Recourcenfressender. Auch wenn tStringList zu einen meiner Lieblingsobjekte zählt halte ich es immer für übertrieben soetwas für kleinigkeiten zu bemüben.
Aber immernoch besser als tListBox ;) (was ich also alternativantwort zu meiner erwartet habe).

Gruß
Klabautermann
Steffer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 299



BeitragVerfasst: Sa 29.06.02 16:08 
@Klabautermann

Was frist den dabei Ressourcen?
Solange man immer wieder schön .Free; berücksichtigt, werden da keine Ressourcen verbraten. :wink:

_________________
Keine Signatur ...
Klabautermann
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: Sa 29.06.02 16:51 
Hi,

ich meine das erstellen des Objektes selber. Das ist sicherlich (intern) um ein vielfaches Aufwendiger als ein einfaches Assign-File.
Aber klar, du gibst den Speicher wieder frei dennoch wird dein Prozessor mehr Arbeit haben um das Object zu erzeugen, die Datei zu laden (wozu intern wieder ein Filestream erzeugt werden muss) und das ganze wieder freizugeben.

Wie gesagt für mich habe ich entschieden den Klassischen weg zu verwenden solange ich nur einfache ansprüche habe, was in diesem Fall gegeben ist.

Gruß
Klabautermann