Thema: Delphi Record laden

Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.171 Beiträge
 
Delphi 12 Athens
 
#14

Re: Record laden

  Alt 26. Mär 2007, 15:38
müßte stimmen
Delphi-Quellcode:
// Schreiben
Len := Length(T);
Stream.Write(Len, SizeOf(Len));
for I := 0 to Length(T) - 1 do
begin
  Stream.Write(T[I].T, SizeOf(Word) * 3); // .T, .M und .J zusammen
  Len := Length(T[I].Zh);
    Stream.Write(Len, SizeOf(Len));
    If Len > 0 Then Stream.Write(T[I].Zh[1], Len);
  Len := Length(T[I].Zm);
    Stream.Write(Len, SizeOf(Len));
    If Len > 0 Then Stream.Write(T[I].Zm[1], Len);
  Len := Length(T[I].B);
    Stream.Write(Len, SizeOf(Len));
    If Len > 0 Then Stream.Write(T[I].B[1], Len);
  ...
  Len := Length(T[I].N);
    Stream.Write(Len, SizeOf(Len));
    If Len > 0 Then Stream.Write(T[I].N[1], Len);
end;


// Lesen
Stream.Read(Len, SizeOf(Len));
SetLength(T, Len);
for I := 0 to Length(T) - 1 do
begin
  Stream.Read(T[I].T, SizeOf(Word) * 3); // .T, .M und .J zusammen
  Stream.Read(Len, SizeOf(Len));
    SetLength(T[I].Zh, Len);
    If Len > 0 Then Stream.Read(T[I].Zh[1], Len);
  ...
  Stream.Read(Len, SizeOf(Len));
    SetLength(T[I].N, Len);
    If Len > 0 Then Stream.Read(T[I].N[1], Len);
end;
Stream.Read/Write wollen ja einen Var/Const-Parameter, welcher auf den Stringinhalt zeigt und dieser beginnt beim 1. Zeichen.


Anders gesagt ... die Implementation von Stream.Read/Write ist sch***


Ach ja, da der Zugriff auf [1] nicht möglich ist, wenn der String leer ist, muß halt nich mit IF dieser Zustand abgefangen werden.
Wenn du garantieren kannst, daß die strings immer mit mindestens einem Zeichen gefüllt sind, dann kannst du natürlich die IF-Abfragen weglassen und direkt Schreiben/Lesen.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat