AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Record dynamisch erzeugen

Ein Thema von Alex_ITA01 · begonnen am 2. Jun 2008 · letzter Beitrag vom 3. Jun 2008
Antwort Antwort
Alex_ITA01

Registriert seit: 22. Sep 2003
1.115 Beiträge
 
Delphi 12 Athens
 
#1

Record dynamisch erzeugen

  Alt 2. Jun 2008, 10:45
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
Let's fetz sprach der Frosch und sprang in den Mixer
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Record dynamisch erzeugen

  Alt 2. Jun 2008, 10:46
Eine Recordstruktur kann man genausowenig wie eine Klassenstruktur dynamisch anlegen.
Markus Kinzler
  Mit Zitat antworten Zitat
Alex_ITA01

Registriert seit: 22. Sep 2003
1.115 Beiträge
 
Delphi 12 Athens
 
#3

Re: Record dynamisch erzeugen

  Alt 2. Jun 2008, 10:50
ok, habe ich mir gedacht. Wollte nur wenigstens mal nachgefragt haben
Let's fetz sprach der Frosch und sprang in den Mixer
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Record dynamisch erzeugen

  Alt 2. Jun 2008, 10:55
du könntest das ganze höchstens mit einer Beschreibung kombinieren die du dann zur Laufzeit auswertest.

Hast du Beispielsweise folgenden Record:
Delphi-Quellcode:
TUnknwon = packed record
  wert1: Byte;
  wert2: Byte;
end;
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.

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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Laplace

Registriert seit: 21. Okt 2007
Ort: Kronach
9 Beiträge
 
Delphi 4 Standard
 
#5

Re: Record dynamisch erzeugen

  Alt 2. Jun 2008, 11:10
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
  Mit Zitat antworten Zitat
Alex_ITA01

Registriert seit: 22. Sep 2003
1.115 Beiträge
 
Delphi 12 Athens
 
#6

Re: Record dynamisch erzeugen

  Alt 2. Jun 2008, 16:42
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
Let's fetz sprach der Frosch und sprang in den Mixer
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Record dynamisch erzeugen

  Alt 3. Jun 2008, 13:16
du könnte Klasse basteln, welcher du den Speicher und den Aufbau übergibst und dann über dieser dir den Speicher zerlegen läßt.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von tomsel
tomsel

Registriert seit: 8. Dez 2005
Ort: am Chiemsee
304 Beiträge
 
Delphi 7 Professional
 
#8

Re: Record dynamisch erzeugen

  Alt 3. Jun 2008, 13:42
Zitat:
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...
Versteh das nicht ganz. Was hindert dich daran, ZWEI Records "vorher" zu erzeugen? Die beiden Dateien wirst du doch programmtechnisch voneinander unterscheiden können, oder?
Ein Experte ist ein Mann, der hinterher genau sagen kann, warum seine Prognose nicht gestimmt hat. (Winston Churchill)
  Mit Zitat antworten Zitat
Benutzerbild von stoxx
stoxx

Registriert seit: 13. Aug 2003
1.111 Beiträge
 
#9

Re: Record dynamisch erzeugen

  Alt 3. Jun 2008, 14:59
Zitat von Alex_ITA01:
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...
na Du müsstest mit Pointern arbeiten, Dir irgendwo die Itemsize merken und mit AllocMem und FreeMem Deinen Speicher selber erzeugen.


Delphi-Quellcode:
node :=Ponter(AllocMem(FItemSize));


FreeMem(Pointer(node));
Phantasie ist etwas, was sich manche Leute gar nicht vorstellen können.
  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 05:14 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