![]() |
Daten von 2D Array speichern
Hi,
ich habe folgende types erstellt und möchte nun meine Daten sichern. Die Daten befinden sich in dem 2D Array Felder:
Delphi-Quellcode:
Wie kann ich die nun speichern? var Datei : File of TFelder; funktioniert nicht, da kommt folgende Fehler:
type
TFeldDaten = record FeldArt : Integer; end; type TFelder = record FeldX, FeldY : Integer; Felder : Array of Array of TFeldDaten; end;
Code:
Danke.
[Fehler] Unit[...](82): Typ 'TFelder' benötigt Finalization - nicht im Dateityp erlaubt
|
Re: Daten von 2D Array speichern
File of? :shock:
Mach dir statt einem record lieber eine Klasse mit SaveToStream, LoadFromStream und vielleicht noch Assign-Methoden.. Dürfte um einiges besser sein ;) (Macht ja am Ende auch nix anderes - schon mal die Sourcen für Read, Write, und Reset gesehen?) |
Re: Daten von 2D Array speichern
Aha, hört sich gut an *g*.
Nee, noch keinerlei Code in der Hinsicht gesehen. |
Re: Daten von 2D Array speichern
es gäbe da 2 möglichkeiten :)
type T2DArray = array of array of whatever; oder type T2DArray = array of whatever; // ooh wunder procedure Init2DArray(aArray: T2DArray; Width, Height: integer); begin SetLength(aArray, Width * Height); end; // gäbe natürlich auch noch ne 3te variante über pointer type P2DArray = ^T2DArray; T2DArray = array of whatever; procedure Init2DArray(var aArray: P2DArray; Width, Height: integer); begin GetMem(aArray, Width * Height * sizeof(whatever); end; um jetz aber nen 2d feld aus dem 1d feld zu machen behilft man sich einer einfachen rechnung da die "zeilen" des "2d" feldes aneinandergereit im 1d feld untergebracht sind function PositionToIndex(X, Y: integer): integer; begin Result := Y * Height + X; end; Index wäre die position im 1d feld ;) ich denke IndexToPosition(Index: integer): TPoint; kannst dir selber herleiten... so und dann is das speichern auch kein problem mehr var xFS: TFileStream; begin xFS := TFileStream('2ddaten.bin', fmCreate); xFS.Write(Width * Height, 4); for i := 0 to (Width * Height) - 1 do xFS.Write(aArray[i], sizeof(whatever)); FreeAndNil(xFS); end; "whatever" wäre dann integer, oder byte, oder wieder nen anderes record - da müsste man dann die schreib routine anpassen ;) |
Re: Daten von 2D Array speichern
Das Speichern scheint zu funktionieren, aber das Laden nicht. Woher weiss der Code, dass ich die Isokarte.Felder[i].Feldart speichern will? Das steht doch garnicht im Code. Und was hat es mit SizeOf aus sich? Warum wird einmal eine 4 und einmal SizeOf an der Stelle von Write verwendet?
|
Re: Daten von 2D Array speichern
ich bin zu faul jedesmal SizeOf(integervariable_oder_integer) zu schreiben, da ich weiß, das aufnem 32bit betriebssystem nen integer (in delphi) 32bit - 4 bytes "groß" ist
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:04 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