Einzelnen Beitrag anzeigen

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