![]() |
Re: Array mit verschiedenen Records
Mein Vorschlag wäre:
Delphi-Quellcode:
Jetzt kannst Du Dir ein Array von diesen Records erstellen und abhängig vom Dateidatum den RecordKind ermitteln. Diesen schreibst Du mit in den Record und kannst dann überall im Programm wissen, welcher art dieser Record ist und dementsprechend zugreifen.
Type
TRecordKind=(rkGanzAlt, rkNichtsoAlt, rkNeu, ...); TMyRecord= Record Kind: TRecordKind; case TRecordKind of rkGanzAlt: // hier alle Member vom alten typ rkNichtsoAlt: // hier alle Member vom alten typ rkNeu: // hier alle Member vom alten typ ..: // hier alle Member vom alten typ end; end; Zu dem Stream lesen: Erstelle Dir für jeden RecordKind eine Konstante, die die jeweilige Gesaamtlänge beinhaltet, dann kannst Du immer soviele Bytes einlesen. |
Re: Array mit verschiedenen Records
Dann aber im richtigen Stil für variante records (kein end nach dem case!):
Delphi-Quellcode:
TMyRecord= Record
case Kind:TRecordKind of rkGanzAlt: // hier alle Member vom alten typ rkNichtsoAlt: // hier alle Member vom alten typ rkNeu: // hier alle Member vom alten typ ..: // hier alle Member vom alten typ end; |
Re: Array mit verschiedenen Records
Das einlesen ist nicht das Problem.
das erstellen des richtigen records nun auch nicht mehr. nur wie sag ich der Variablen Data, dass sie mal der eine record ist und mal der andere ? Prinzip:
Delphi-Quellcode:
edit: ich find es leichter und einfacher 6 records zu erstellen, als mit den variant recordds rumzukaspern.
var
Data : ???; begin case Format of 0: Data:=TDaten_0; 1: Data:=TDaten_1; end; end; die 6 records sind ja schon erstellt und fertig, nur die zuweisuzng und auslesen und einem editfeld zuweisen klappt nicht |
Re: Array mit verschiedenen Records
Hallo,
so wie du das schreiben willst, musst du für jede der 6 Versionen eine eigene Variable mitführen. Die 6 Records unterscheiden sich noch mal wodurch ? Durch bestimmte String-Längen ? Wenn ja, benutze für das Lesen/Schreiben deine 6 verschiedenen Records, aber in allen anderen Routionen genau einen Record (nur String als Type, nicht array[0..] of Char). Wenn du unbedingt eine 6 records haben willst, dann könntest du auch so vorgehen
Delphi-Quellcode:
Sie umständlich aus, ist es auch ...
type
TRec1 = record // Daten end; type TRec2 = record // Daten end; .. type TRec6 = record // Daten end; type TRecAllData : record iVersion: Integer; //1-6 Rec1: TRec1; Rec2: TRec2; .. Rec6: TRec6; end; Heiko |
Re: Array mit verschiedenen Records
naja, ich mache dann jetzt zu den 6 verschiedenen records noch 6 proceduren, die die datei dann mit dem richtigen record auslesen.
find ich zwar unschön und irgendwie umständlich, aber es geht wohl nicht anders, bzw. ich bekomme es nicht anders hin. vielen dank trotzdem an alle hier für ihre bemühungen Edit: so, mit den 6 records und 6 proceduren funktioniert es nun einwandfrei. mfg Scrutor |
Re: Array mit verschiedenen Records
Es reicht eigentlich 1 Routine zum lesen:
Delphi-Quellcode:
procedure ReadFromStream(Data:Pointer;Datasize:Integer);
begin Stream.Read(data^,datasize); end; Je nach Typ mußt du natürlich entsprechend die Daten übergeben. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:34 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