![]() |
Record dynamisch erzeugen
Hallo zusammen,
ich möchte eine Art Offline-Viewer von gespeicherten Binär-Dateien programmieren. Diese Binär-Dateien wurden als Stream mit einer bestimmten Record-Struktur abgespeichert. Diese Struktur kennt mein Offline Viewer ja nicht und ich möchte diese zur Laufzeit "eingebbar" machen (wie, überlege ich mir noch). Wie kann ich jetzt im Viewer diese Struktur dynamisch erzeugen, damit ich die Datei einlesen kann? Ich hoffe, ihr wisst was ich meine und könnt mir ein Tip geben. Viele Grüße, Alex |
Re: Record dynamisch erzeugen
Eine Recordstruktur kann man genausowenig wie eine Klassenstruktur dynamisch anlegen.
|
Re: Record dynamisch erzeugen
ok, habe ich mir gedacht. Wollte nur wenigstens mal nachgefragt haben :-)
|
Re: Record dynamisch erzeugen
du könntest das ganze höchstens mit einer Beschreibung kombinieren die du dann zur Laufzeit auswertest.
Hast du Beispielsweise folgenden Record:
Delphi-Quellcode:
so müsstest du eigentlich erstmal nur wissen das er 2 Byte groß ist um die Daten einzulesen. Wie die 2 Byte zu interpretieren sind ist erstmal egal. Als nächstes kommt dann die Beschreibung welche dir sagt wie die Daten zu interpretieren sind. Diese müsstest du ja auch irgendwo ablegen.
TUnknwon = packed record
wert1: Byte; wert2: Byte; end; Um das ganze einigermaßen brauchbar umzusetzen bietet sich ein eigenes Object an welches eine Liste von Werten hat. Jeder Listeneintrag muss dann den Typ beinhalten und den dazugehörigen Wert. |
Re: Record dynamisch erzeugen
Hi Alex,
vielleicht kannst du mal folgendes probieren: 1.) Erzeug' dir ein dynamisches Byte- (oder Integer-) Array mit der Länge deines Datensatzes (also Anzahl der Felder). 2.) In dieses Array trägst du Index-Werte für die Datentypen, die im Stream vorkommen ein, also z.B. 0= eine 1 Byte-Zahl, 1= eine 2 Byte-Zahl, ... 5= eine Fließkomma 8 Byte-Zahl (Double) ... 21= nullterminierter String ... 3.) Dieses Array kannst du in einer case-Schleife einfach auswerten (sprich einlesen), in Strings umwandeln und als Text ausgeben. Schönen Tag noch Laplace |
Re: Record dynamisch erzeugen
Danke für die Tips, aber das Problem ist ja, dass die Größe des Datensatzes nicht immer gleich ist. Das heißt, ich habe eine Datei, die besteht aus einem Record mit 15 Byte-Felder. Dann habe ich noch eine Datei, die besteht vom Record aus 1x Double, 1x Byte, 1xWord und wieder 14x Byte. Daher kann ich kein Record vorher erzeugen...
Ich denke mal noch ein bisschen drüber nach. Gruß, Alex |
Re: Record dynamisch erzeugen
du könnte Klasse basteln, welcher du den Speicher und den Aufbau übergibst und dann über dieser dir den Speicher zerlegen läßt.
|
Re: Record dynamisch erzeugen
Zitat:
|
Re: Record dynamisch erzeugen
Zitat:
Delphi-Quellcode:
node :=Ponter(AllocMem(FItemSize));
FreeMem(Pointer(node)); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:06 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