Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Dynamisches Array verschachteln und speichern (https://www.delphipraxis.net/169208-dynamisches-array-verschachteln-und-speichern.html)

tgvoelker 5. Jul 2012 11:29

AW: Dynamisches Array verschachteln und speichern
 
Zitat:

Zitat von Iwo Asnet (Beitrag 1173644)
Zitat:

Zitat von tgvoelker (Beitrag 1173643)
Dafür gibt's die For-Schleife.

Das ursprüngliche Datendesign enthielt verschachtelte Arrays in Records. Durch geeignete Speicherfunktionalität, z.B. durch die von mir beschriebene, muss man davon nicht abweichen.

Das impliziert zweierlei: erstens, daß der Algorithmus sich nicht auf "verschachtelte Arrays" anwenden ließe (was nicht stimmt, weil genau diese Verschachtelung durch die For-Schleife behandelt wird), und zweitens, daß der Algorithmus nicht geeignet wäre.

tgvoelker 5. Jul 2012 23:27

AW: Dynamisches Array verschachteln und speichern
 
Zitat:

Zitat von himitsu (Beitrag 1173649)
Zitat:

Zitat von tgvoelker (Beitrag 1173643)
Dafür gibt's die For-Schleife.

Gut, aber wie ist es mit dem Auslesen?
Beim Auslesen des records schreibst du einen "defekten" Pointer in den Record

Ja, das Auslesen ist schon etwas kniffliger, aber nicht wegen dem Zeiger, der wird einfach auf $00000000 gesetzt und dann die Länge des Arrays iterativ erhöht, sondern, weil man die nacheinander abgespeicherten Records unterscheiden muß. Das Kriterium dafür würde ich bei dem (wie ich vorhin schrieb, anstelle Stirng) Shortstring setzen, wobei da natürlich geprüft werden müßte, ob die Zeichen im String überhaupt zulässige Zeichen sind. Wahrscheinlich hätte ich im Rahmen der Implementierung die Records geändert und einen Strukturidentifikator eingefügt an die erste Stelle, das würde die Sache deutlich einfacher machen.

NickelM 6. Jul 2012 01:54

AW: Dynamisches Array verschachteln und speichern
 
An die Strings hatte ich auch garnicht mehr gedacht. :oops: War spät :-D
Wie schon erwähnt wurde im anderen Thread, eine Klasse von TObject mit eigener SaveToStream/File und LoadFromStream/File Methode wäre das Beste. Ich hab eine Record gespeichert der nur Typen wie Integer,Cardinal usw. enthielt. Wo die wichtigsten Sachen drin waren. Wenn ich einen String benötigt hatte, hab ich, wenns ging die Länge in den Record mit aufgenohmen. Natürlich sollte man packed records verwenden find ich, wenn man mit Dateien arbeitet.
Man wird find ich nicht wirklich darum herum kommen entweder feste Stringlängen alla
Delphi-Quellcode:
Text : String[10];
zumachen und damit abfinden, das leere Zeichen in der Datei liegen oder man schreibt wie erwähnt alle Typen per Hand, was man bei einer Klasse sowieso machen müsste.
Racord zuspeichern macht nur Sinn, wenn man "feste" Daten, also Daten die immer die gleiche Länge hat speichern möchte. Für dynamische Sachen wie Arrays, Strings muss man halt in eine Extra varible Schreiben.

Kurz noch zum Abschluss, wie schon erwähnt wurde mach dir ne Klasse und schreib ne SaveToStream/File und LoadFromStream/File Methode, die alle Werte einzeln reinschreibt.
Wäre das beste. Oder wenn du bei denen Records bleiben willst, musste du jede Variable im Record einzeln Schreiben, und beim Lesen in den Record eintragen.

Gruß NickelM


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:30 Uhr.
Seite 2 von 2     12   

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