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.