Dynamisches Array speichern |
|
| System | Win9x, WinNT, Win2000, WinXP, Vista, Win7 |
|---|---|
| Ab Delphi-Version | Delphi 1 |
| Letzte Änderung | 28.09.2010 |
Array speichern
Mit folgender Prozedur kann ein dynamisches Array gespeichert werden.Dabei ist zu beachten, dass alle Elemente des Arrays immer gleich viel Speicher belegen müssen - ein dynamischer String als Element kommt hier also nicht in Frage. Um aber eine Liste mit Strings auf diese Art zu speichern, muss die Größe von dem String konstant bleiben. Dies erreicht man mit den Datentyp ShortString: Seine Größe bleibt konstant und wird bei der Definition über eine in eckigen Klammern eingeschlossene Zahl hinter dem Schlüsselwort string angegeben.Diese Zahl stellt die Größe bzw. die Länge des Strings dar.So sieht die Definition eines dynamischen Arrays aus, wobei jedes Element ein 20 Zeichen langer ShortString ist:
type
TArrayData = array of string[20];
Über diese Prozedur kann ein beliebiges dynamisches Array gespeichert werden, gegebenenfalls muss die Typ-Definition von TArrayData angepasst werden:
var
FStream: TFileStream;
i: Integer;
begin
FStream := TFileStream.Create(AFilename, fmCreate); //Öffnen des Streams (falls er noch nicht existiert, wird er neu erzeugt)
try
for i := 0 to High(AArrayData) do //Schreiben der Elemente aus dem Array in den Stream
FStream.Write(AArrayData[i], SizeOf(AArrayData[i]));
finally
FStream.Free;
end;
end;
Dabei wird jedes Element aus dem Array hintereinander in den Stream geschrieben.Beispiel-Aufruf zum Speichern eines dynamischen Arrays:
ArrayData: TArrayData;
begin
SetLength(ArrayData, 5); //Befüllen des Arrays mit Daten
ArrayData[0] := 'Herr Meier';
ArrayData[1] := 'Max Mustermann';
ArrayData[2] := 'Lorem Ipsum';
ArrayData[3] := 'dolor sit amet';
ArrayData[4] := 'sed diam nonumy';
SaveArray(ExtractFilePath(Application.ExeName) + 'test.dat', ArrayData); //Speichern des Arrays als "test.dat" im Verzeichnis der Exe-Datei
end;
Array laden
Mit dieser Prozedur kann ein gespeichertes dynamisches Array wieder geladen werden:
var
FStream: TFileStream;
i: Integer;
begin
FStream := TFileStream.Create(AFilename, fmOpenRead); //Öffnen des Streams zum Lesen
try
SetLength(AArrayData, FStream.Size div SizeOf(AArrayData[0])); //Setzen der Anzahl der Elemente im Array
for i := 0 to High(AArrayData) do
FStream.Read(AArrayData[i], SizeOf(AArrayData[i])); //Einlesen der Daten in das Array
finally
FStream.Free;
end;
end;
Damit das Array geladen werden kann, muss zuerst ermittelt werden, wie viele Einträge das Array haben soll.Dann kann jedes Element aus dem Array direkt geladen werden.Beispiel-Aufruf zum Laden eines dynamischen Arrays:
var
ArrayData: TArrayData;
begin
LoadArray(ExtractFilePath(Application.ExeName) + 'test.dat', ArrayData); //Laden des Arrays aus der Datei "test.dat"
im Verzeichnis der Exe-Datei
end;
- Laden und Speichern von Texten aus Memofeldern in Dateien
- Komponenten speichern/laden
- Inhalt eines Edit-Feldes speichern
- Inhalt eines StringGrids speichern und laden
- Array als Result einer Funktion
- Dynamische Arrays
- Zufallsarray erzeugen
- Array-Element löschen, ohne dass eine Lücke entsteht
- Summe aller Array-Werte errechnen
- Records abspeichern