Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Variabler Record


Argiope - Mi 19.11.08 11:34
Titel: Variabler Record
Hallo,

bin das erstemal hier undd schreibe progs nur wenn ich muss :-).

ich möchte eine Datei lesen, die aus folgenden dynamischen Records besteht:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
  Cnt1  : word;  // Offset 0 : Länge von Str1
  Str1  : pchar;  // 0-terminierter String    
  Cnt2  : word;  // Offset =Cnt1+2 : Länge von Str2
  Str2     : pchar;    // 0-terminierter String
  Cnt3     : word;          // Offset =Cnt1+Cnt2+2+2 : Länge von Str3
  Str3     : pchar;    // 0-terminierter String
  Cnt4     : Dword;       // Offset =Cnt1+Cnt2+Cnt3+2+2+2 : Anzahl der Kacheln
  Kacheln   : array of Dword;   // Index in eine andere Tabelle 
  Cnt5     : Dword;       // offset =Cnt1+2+Cnt2+2+Cnt3+2(Cnt4*4)+4 Anzahl der Eckwertpaare
  Ecken    : array of double;  // Eckwertepaare je 2*double


bislang habe ich mir geholfen indem ich das in eine Array of bytes gepackt habe und mit move an die richtigen stellen geräumt.
Aber für die Strings schlägt das fehl, die sind hinterher leer.

Hat jemand eine Idee?

Gruß,

Thomas

Moderiert von user profile iconAXMD: Delphi-Tags hinzugefügt


BenBE - Do 20.11.08 14:52

Beim Lesen von Strings musst Du bevor Du diese befüllen kannst manuell SetLength aufrufen.
Gleiches gilt für dynamische Arrays.


Argiope - Do 20.11.08 15:45

Hallo,

Problem gelöst mit Array[0..127] of char pchar und zuweisung:

Delphi-Quelltext
1:
2:
3:
4:
            blockread(anyfile,Cnt1,2);
            blockread(anyfile,Anystr,Cnt1);
            anypchar:=@anystr[0];
            Str1:=string(anypchar);


Str1 ist nun kein pchar mehr sondern ein string

Danke.

Gruß

Thomas

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt