Autor Beitrag
schlumsch
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 122

alles Win :)
Delphi 2005 Prof, Delphi 2007
BeitragVerfasst: Sa 20.11.04 19:25 
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 user profile iconChristian S.: Topic aus CLX / Delphi Language (Object-Pascal) verschoben am Sa 20.11.2004 um 18:30

_________________
icq 102779206
"God is real, unless declared integer..."
wulfskin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1349
Erhaltene Danke: 1

Win XP
D5 Pers (SSL), D2005 Pro, C, C#
BeitragVerfasst: 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:
  1. Zunächst die Länge speichern (ich benutze dafür den Typ Word) und dann die einzelnen Zeichen.
  2. Die Zeichen speichern und mit einem #0-Zeichen beenden (PChar).
Hier die Methoden die du für beide brauchst:
ausblenden volle Höhe 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: Stringconst 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!

_________________
Manche antworten um ihren Beitragszähler zu erhöhen, andere um zu Helfen.
schlumsch Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 122

alles Win :)
Delphi 2005 Prof, Delphi 2007
BeitragVerfasst: Sa 20.11.04 20:39 
He ich dank dir


MFG

_________________
icq 102779206
"God is real, unless declared integer..."
schlumsch Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 122

alles Win :)
Delphi 2005 Prof, Delphi 2007
BeitragVerfasst: 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

_________________
icq 102779206
"God is real, unless declared integer..."
wulfskin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1349
Erhaltene Danke: 1

Win XP
D5 Pers (SSL), D2005 Pro, C, C#
BeitragVerfasst: So 21.11.04 13:18 
Auf persöhnlichen Wunsch nochmal eine Erläuterung zu der Funktion ReadNTString und seinem Gegenstück:
ausblenden 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;

//Gegenstück:

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!

_________________
Manche antworten um ihren Beitragszähler zu erhöhen, andere um zu Helfen.