Entwickler-Ecke
Dateizugriff - String bel. Länge speichern
schlumsch - Sa 20.11.04 19:25
Titel: String bel. Länge speichern
Hallo,
ich möchte eines String beliebiger Länge per Filestream speichern.
Kann mir da wer sagen wie das geht bzw. wo ich ab besten nachschauen kann?
Thx schlumsch
Moderiert von
Christian S.: Topic aus CLX / Delphi Language (Object-Pascal) verschoben am Sa 20.11.2004 um 18:30
wulfskin - Sa 20.11.04 19:44
Hallo,
ich hab dir mal ein paar Methoden aus meiner FileStream Klasse rauskopiert. Dann kannst du selber entscheiden welche Methode du wählen möchtest:
- Zunächst die Länge speichern (ich benutze dafür den Typ Word) und dann die einzelnen Zeichen.
- Die Zeichen speichern und mit einem #0-Zeichen beenden (PChar).
Hier die Methoden die du für beide brauchst:
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: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41:
| procedure TMyFileStream.WriteString(const S: String; const WriteSize: Boolean); var Len: Word; begin Len := Length(S); if WriteSize then WriteBuffer(Len, SizeOf(Len)); if Len > 0 then WriteBuffer(Pointer(S)^, Len); end;
function TMyFileStream.ReadString(const Len: Word): String; begin SetLength(Result, Len); if Len > 0 then begin if Read(Pointer(Result)^, Len) <> Len then Result := ''; end; end;
function TMyFileStream.ReadString: String; var Len: Word; begin if Read(Len, SizeOf(Len)) <> SizeOf(Len) then Result := '' else Result := ReadString(Len); end;
function TMyFileStream.ReadNTString: String; var C: Char; begin Result := ''; Read(C, SizeOf(C)); while C <> #0 do begin Result := Result + C; Read(C, SizeOf(C)); end; end; |
Such dir raus, was du brauchst!
Viele Grüße,
Hans-Peter!
schlumsch - Sa 20.11.04 20:39
He ich dank dir
MFG
schlumsch - So 21.11.04 09:22
Also, nochmal für alle falls es interessiert ( hatte das privat abgeklärt )
Beim Laden ses Strings nicht vergessen dir Längfe zu stezen -> siehe oben Code "Setlengh".
Ansonwten gibts murks ;)
schlumsch
wulfskin - So 21.11.04 13:18
Auf persöhnlichen Wunsch nochmal eine Erläuterung zu der Funktion
ReadNTString und seinem Gegenstück:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| function TMyFileStream.ReadNTString: String; var C: Char; begin Result := ''; Read(C, SizeOf(C)); while C <> #0 do begin Result := Result + C; Read(C, SizeOf(C)); end; end;
procedure TMyFileStream.WriteNTString(const S: String); begin WriteBuffer(PChar(S)^, Length(S) + 1); end; |
Also die Lade-Funktion
ReadNTString lädt Buchstabe für Buchstabe in eine Zeichenkette und bricht schliesslich das Laden ab, wenn ein #0-Zeichen ereicht ist.
Die Schreib-Prozedur schreibt die Zeichenkette plus dem abschliessenden #0-Zeichen in den Stream.
Gruß Hape!
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 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!