AGB  ·  Datenschutz  ·  Impressum  







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

Daten von 2D Array speichern

Ein Thema von Yheeky · begonnen am 19. Jul 2005 · letzter Beitrag vom 29. Jul 2005
Antwort Antwort
Yheeky

Registriert seit: 7. Jun 2002
1.339 Beiträge
 
#1

Daten von 2D Array speichern

  Alt 19. Jul 2005, 15:01
Hi,

ich habe folgende types erstellt und möchte nun meine Daten sichern. Die Daten befinden sich in dem 2D Array Felder:

Delphi-Quellcode:
type
    TFeldDaten = record
      FeldArt : Integer;
    end;

type
    TFelder = record
      FeldX, FeldY : Integer;
      Felder : Array of Array of TFeldDaten;
    end;
Wie kann ich die nun speichern? var Datei : File of TFelder; funktioniert nicht, da kommt folgende Fehler:
Code:
[Fehler] Unit[...](82): Typ 'TFelder' benötigt Finalization - nicht im Dateityp erlaubt
Danke.
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#2

Re: Daten von 2D Array speichern

  Alt 19. Jul 2005, 15:04
File of?

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?)
  Mit Zitat antworten Zitat
Yheeky

Registriert seit: 7. Jun 2002
1.339 Beiträge
 
#3

Re: Daten von 2D Array speichern

  Alt 19. Jul 2005, 15:09
Aha, hört sich gut an *g*.
Nee, noch keinerlei Code in der Hinsicht gesehen.
  Mit Zitat antworten Zitat
barf00s
(Gast)

n/a Beiträge
 
#4

Re: Daten von 2D Array speichern

  Alt 19. Jul 2005, 15:11
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
  Mit Zitat antworten Zitat
Yheeky

Registriert seit: 7. Jun 2002
1.339 Beiträge
 
#5

Re: Daten von 2D Array speichern

  Alt 19. Jul 2005, 18:14
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?
  Mit Zitat antworten Zitat
barf00s
(Gast)

n/a Beiträge
 
#6

Re: Daten von 2D Array speichern

  Alt 29. Jul 2005, 12:05
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
  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 13:12 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