Einzelnen Beitrag anzeigen

Benutzerbild von Glocke89
Glocke89

Registriert seit: 2. Mär 2007
Ort: Thüringen
80 Beiträge
 
Lazarus
 
#6

Re: File of Array

  Alt 29. Mär 2009, 16:29
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.
Christian
  Mit Zitat antworten Zitat