AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen FreePascal Array of Record per FileStream speichern
Thema durchsuchen
Ansicht
Themen-Optionen

Array of Record per FileStream speichern

Ein Thema von Glocke89 · begonnen am 29. Mär 2009 · letzter Beitrag vom 29. Mär 2009
 
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, 15: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
 


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 07:30 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz