AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Speichern 2-dim. dynamischer ShortString-Arrays als Stream
Thema durchsuchen
Ansicht
Themen-Optionen

Speichern 2-dim. dynamischer ShortString-Arrays als Stream

Ein Thema von KPBecker · begonnen am 18. Jan 2010 · letzter Beitrag vom 18. Jan 2010
Antwort Antwort
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
Benutzerbild von himitsu
himitsu

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

Re: Speichern 2-dim. dynamischer ShortString-Arrays als Stre

  Alt 18. Jan 2010, 18:57
dynamische Arrays sind Zeiger ... du mußt also die Strings einzeln speichern
(wobei man die Daten der tierfsten Arays auch zusammen Speichern könnte)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Horst_

Registriert seit: 22. Jul 2004
Ort: Münster Osnabrück
116 Beiträge
 
#3

Re: Speichern 2-dim. dynamischer ShortString-Arrays als Stre

  Alt 18. Jan 2010, 19:37
Hallo,

Du musst zuvor aber irgendwie Dimensionen abspeichern, eventuell auch die Stringlänge, falls diese variabel ist.
Denn 10x5 String[x] belegen den gleichen Platz wie 5x10 String[x].
Also so ähnlich:
Delphi-Quellcode:
type
  TFeldGroessen = record
                     Zeilen,
                     Spalte,
                     StringSize : integer;
                     //..
                   end;
var
  Datei: TFileStream;
  FeldGroessen : TFeldGroessen;
  i: integer;
  s: String[15];
begin
  with FeldGroessen do
    begin
    Zeilen := high(Feld)-Low(Feld)+1;
    Spalten := high(Feld[0])-Low(Feld[0])+1;
    stringSize := SizeOf(s);//Obacht -> String[StringSize-1]
    end;
  Datei:= TFileStream.Create(<Dateiname>, fmOpenWrite);
  Datei.WriteBuffer(FeldGroessen,SizeOf(FeldGroessen));
  //Alle Zeilen nacheinander abspeichern -> Daten des tiefsten array sind die Spalten
  For i := 0 to FeldGroessen.Zeilen-1 do
    Datei.WriteBuffer(Feld[i], SpaltenZahl* SizeOf(s));
  ....
  end;
Gruß Horst
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:07 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz