AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Datei mit dynamischen Array einlesen
Thema durchsuchen
Ansicht
Themen-Optionen

Datei mit dynamischen Array einlesen

Ein Thema von lagalex · begonnen am 18. Feb 2013 · letzter Beitrag vom 19. Feb 2013
 
lagalex

Registriert seit: 16. Jan 2011
7 Beiträge
 
#1

Datei mit dynamischen Array einlesen

  Alt 18. Feb 2013, 15:29
Hallo allerseits,

Ich steh vor einem Problem und weiß nicht, wie ich es lösen könnte, da immer beim Dimensionieren ein Fehler auftritt, vielleicht kann mir wer weiterhelfen:

Ich möchte ein File als stream einlesen, das zuerst aus einem statischen Header besteht, dann aber je nach Inhalt dynamisch wird:

type TFileHeader = packed record
FileCode :LongInt;
[...]
end; // ist 100 Bytes groß

nach diesem statischen Header kommt immer ein Record Header mit folgender Struktur:

type TRecordHeader = packed record
ID : LongInt; // Big Endian 4 Byte
Laenge : LongInt; // Big Endian 4 Byte
end;

ID zählt einfach beginnend von 1 hinauf, Laenge gibt die Größe des nachfolgenden Records an.

danach kommt eben der Objekt-Record, der je nach Wert einer bestimmten Variable im FileHeader eine andere Struktur hat (es handelt sich hierbei um .shp - ESRI Shapefiles):

Mein Problem taucht bei folgender Struktur auf:

type TObjektRecord = packed record
ShapeType : LongInt;
Box : TBox; // ist x1,y1,x2,y2 of Double = Rechteck
NumParts : LongInt;
NumPoints : LongInt;
Parts : Array of LongInt;
Points : Array of TPunktXY; // ist X,Y : Double
end;

NumParts sagt mir, wie viele Elemente im Array Parts sind.
NumPoints sagt mir, wie viele Elemente im Array Points sind.

Wenn ich jetzt eben hergehe und sage:

var Strom : TFileStream;

try
Strom:=TFileStream.Create(Dateiname, fmOpenRead);
Strom.Read(FileHeader, SizeOf(FileHeader));
except
[...]
end;

alles kein Problem, jedoch

repeat
// RecordHeader einlesen
Strom.Read(RecordHeader, SizeOf(RecordHeader));
Strom.Read(varShapeType, SizeOf(varShapeType));
Strom.Read(varBox, SizeOf(varBox));
Strom.Read(varNumParts, SizeOf(NumParts));
Strom.Read(varNumPoints, SizeOf(NumPoints));
SetLength(varParts, NumParts); <--------------- Hier kommt dann spätestens die AV, Programmabbruch
SetLength(varPoints, NumPoints);
Strom.Read(varParts, SizeOf(varParts));
Strom.Read(varPoints, SizeOf(varPoints));
until (Strom.Position>FileHeader.FileLen);

Was mache ich falsch, wo ist mein Denkfehler drin?

Vielen Dank im Voraus!!

LG Alex
  Mit Zitat antworten Zitat
 

 

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 19:16 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz