Einzelnen Beitrag anzeigen

KPBecker

Registriert seit: 1. Mär 2004
Ort: Mannheim
120 Beiträge
 
Delphi 2010 Architect
 
#1

Speichern 2-dim. dynamischer ShortString-Arrays als Stream

  Alt 18. Jan 2010, 18:37
Hallo, Delphi-Praktiker !

Ich habe mir folgendes dynamische ShortString-Array definiert:
Delphi-Quellcode:
var
  Feld: Array of Array of String[15];
Im Laufe des Programms dimensioniere ich es:
  setLength(Feld, xLaenge, yLaenge); Dieses Array möchte ich dann mit folgender Anweisung in einem Stream speichern:

Delphi-Quellcode:
var
  Datei: TFileStream;
  s: String[15];
begin
  Datei:= TFileStream.Create(<Dateiname>, fmOpenWrite);
  Datei.WriteBuffer(Feld[0, 0], xLaenge * yLaenge * SizeOf(s));
end;
Jetzt passiert aber folgendes:
Ich speichere mein Feld mit folgenden Einstellungen ab:
Delphi-Quellcode:
xLaenge:= 6;
yLaenge:= 2;
Feld:= (('1', '2'),
        ('3', '4'),
        ('5', '6'),
        ('7', '8'),
        ('9', '10'),
        ('11', '12'));
Jetzt steht in der Stream-Datei (im Editor betrachtet) folgendes drin:
1 2 ÀŒ®   3 4 ÀŒ®   5 6 ÀŒ®   7 8 ÀŒ®   Hier erkennt man ja, dass jedes Element meines Arrays 1+15 Byte lang ist, ok. Aber nach dem zweiten Eintrag stehen 16 Byte Unsinn, dann kommen '3' und '4' und wieder 16 Byte Unsinn usw. Also immer nach zwei Elementen 16 Byte, von denen ich nicht weiß, woher sie kommen. Dadurch fehlen mir natürlich die letzten vier Elemente!

Weiß jemand, woher das kommt?


Völlig abstrus wird es, wenn ich die Länge des ShortStrings auf sieben Zeichen setze. Dann sind die ersten zwei Elemente noch in Ordnung, der Rest hat aber nichts mehr mit dem Soll zu tun.

Frage:
Wie speichert man ein mehrdimensionales dynamisches ShortString-Array sauber ab?

Vielen Dank
KPB
  Mit Zitat antworten Zitat