Ich merk gerade es geht auch ganz anders:
Die Spionageberichte kann ich auch direkt in die Unterpunkte "Rohstoffe", "Gebäude" etc. zerlegen, da reichen 255 Zeichen aus ... ich schau mir das mit dem Array of Char trotzdem der Vollständigkeit halber mal an.
Nochmal danke für die Erinnerung mit dem String, dass der nen Zeiger enthält
So... mittlerweile bin ich über
diesen Thread auf die Idee gekommen das ganze mit StreamFile abzuspeichern:
Delphi-Quellcode:
procedure SaveDatenbank(x: TDB; Filename: String);
var fs: TFileStream;
l, i: Integer;
begin
fs := TFilestream.Create(Filename, fmCreate);
try
for i := 0 to High(x) do
begin
fs.Write(x[i].Koordinaten, SizeOf(TKoordinaten));
fs.Write(x[i].Mond, SizeOf(boolean));
fs.Write(x[i].Tag, SizeOf(TTag));
fs.Write(x[i].Zeit, SizeOf(TZeit));
l := Length(x[i].Spionagebericht);
fs.Write(l, SizeOf(string));
fs.Write(x[i].Spionagebericht, l);
l := Length(x[i].Autor);
fs.Write(l, SizeOf(string));
fs.Write(x[i].Autor, l);
end;
finally
fs.Free;
end;
end;
// -----------------------------------------------------------------------------
function LoadDatenbank(Filename: String): TDB;
var fs: TFileStream;
l, i: Integer;
begin
fs := TFilestream.Create(Filename, fmOpenRead);
try
i := 0;
while { hier fehlt mir irgendeine Bedingung } do
begin
fs.Read(Result[i].Koordinaten, SizeOf(TKoordinaten));
fs.Read(Result[i].Mond, SizeOf(boolean));
fs.Read(Result[i].Tag, SizeOf(TTag));
fs.Read(Result[i].Zeit, SizeOf(TZeit));
fs.Read(l, SizeOf(string));
SetLength(Result[i].Spionagebericht, l);
fs.Read(Result[i].Spionagebericht, l);
fs.Read(l, SizeOf(string));
SetLength(Result[i].Autor, l);
fs.Read(Result[i].Spionagebericht, l);
i := i + 1;
end;
finally
fs.Free;
end;
end;
Mir fehlt beim "Laden" die Bedingung wann meine Schleife (die alle Elemente auslesen soll) abbrechen soll.
Ich hab einen Zähler (i) eingefügt um die einzelnen Elemente des Arrays anzusprechen.