Hallo Thomas, Am Sonntag, 12. Juli 2009 schrieb Thomas Hertweck:
Hallo!
Eine eher generelle Frage, ob folgendes in C++ moeglich ist (bzw. wie man so etwas aehnliches erzielen kann):
Ich muss Daten von der Festplatte lesen, die ein bestimmtes Layout haben, ein Mix aus short, int, float und double. Im Prinzip waere es relativ einfach, wenn das Layout stets das Gleiche waere, man koennte dann einfach einen statischen struct wie z.B.
struct data { double xcoordinate; double ycoordinate; int counter; float attribute; }; Das sieht sehr übersichtlich aus - ich vermute aber, dass das im realen Programm etwas länger ist?
definieren und sizeof(struct data) einlesen und haette direkt Zugriff auf alle Variablen (ggf. nach byte-swapping, da die Variablen u.U. als big endian abgelegt sind). So weit so gut.
Dummerweise kommt es vor, dass manchmal die Reihenfolge der Variablen sich aendert und z.B. "attribute" vor "counter" kommt im obigen Beispiel. Ein ... Das Layout des struct kann ich einfach ueber eine XML Datei beschreiben (Variablen-Name, Typ, Byte-Offset, usw.). Es waere nun schoen, wenn man den struct quasi on-the-fly dynamisch definieren koennte zur Laufzeit. Ist so etwas in der Art moeglich? Ich denke, dazu fehlen einfach noch ein paar Informationen. Sind die Datentypen fest an die einzelnen Variablen gekoppelt oder wechseln die auch? (z.B. xccordinate mal als double, mal als int) Wenn die fest wären, könntest Du die Daten in einen Speicherbereich einlesen und in dem struct die Variablen als Pointer deklarieren, die Du dann entsprechend dem Aufbau in der Datei passend auf die einzelnen Bestandteile setzt. Oder: Wieviele Kombinationen gibt es für die Reihenfolge der Variablen? Du könntest verschiedene struct definieren und dann passend casten. Passt natürlich nur für eine kleine Menge an Kombinationen und auch nur dann, wenn es Dir sowohl beim Lesen aus der Datei wie auch beim Zugriff auf Performance ankommt.
Gruß Martin -- To unsubscribe, e-mail: opensuse-programming-de+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-programming-de+help@opensuse.org