Entwickler-Ecke
Dateizugriff - in eine kleine Datei speichern
FredAffe - Do 27.06.02 13:39
Titel: in eine kleine Datei speichern
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?
Klabautermann - Do 27.06.02 14:21
Hallo,
Hier mal als beispiel, für genaue erklärungen einfach mal in die Online-Hilfe gucken ;).
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 - 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.
Klabautermann - Do 27.06.02 18:18
Hi,
dann ersetze
Quelltext
1: 2: 3: 4:
| IF FileExists(aFileName) THEN Append(f) ELSE Rewrite(f); |
durch
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 - Fr 28.06.02 13:33
Oder kürzer:
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
Klabautermann - 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 - 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:
Klabautermann - 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
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 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!