AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

TListe als Datei Speichern

Ein Thema von Vaporizor · begonnen am 15. Nov 2013 · letzter Beitrag vom 16. Nov 2013
Antwort Antwort
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#1

AW: TListe als Datei Speichern

  Alt 15. Nov 2013, 22:24
TSpielkarte.SaveToFile ist dein Freund. Zeig mal die Klasse TSpielkarte, dann kann man mehr dazu sagen?
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: TListe als Datei Speichern

  Alt 15. Nov 2013, 22:32
TSpielkarte.SaveToFile ist dein Freund. Zeig mal die Klasse TSpielkarte, dann kann man mehr dazu sagen?
Es geht doch nicht nur um das Speichern einer Spielkarte, sondern eines ganzen Stapels (evtl. sogar noch Meta-Informationen über die Spielstufe, etc.)

@Vaporizor

Hast du dir schon mal überlegt, wie und vor allem was in der Datei stehen soll?
Das ist der erste Schritt, danach überlegt man sich, wie man das in eine Datei bekommt.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Thomasl

Registriert seit: 19. Jun 2006
Ort: Vreden
67 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: TListe als Datei Speichern

  Alt 16. Nov 2013, 00:18
Ich habe hier mal was ungetestet zusammenkopiert.
Bei einer Class geht das nicht, da wird dann nur der Pointer gespeichert.
Bei normalen Strings muss auch die länge gespeichert werden.
Mit >500Mb/Sec kann ich so bei mir Daten auf SSD Speichern
Wenn die Datenpunkte in TSpielkarte mal erweitert werden sollen ist XML wohl die bessere Wahl


Delphi-Quellcode:
procedure SaveToStream(Stream: TStream);
var
  n: Integer;
  Spielkarte: TSpielkarte;
begin
    // DataCount
    Stream.WriteBuffer(Data.Count, SizeOf(Integer));
    // Data
    for n := 0 to Data.Count - 1 do
    begin
      Spielkarte := Data.Items[n];
      Stream.WriteBuffer(Spielkarte[n], SizeOf(TSpielkarte));
    end;

    //for Spielkarte in Data.List do
    // Stream.WriteBuffer(Spielkarte, SizeOf(TSpielkarte));
end;

procedure SaveToFile(const FileName: String);
var
  Stream: TStream;
begin
  Stream := TFileStream.Create(FileName, fmCreate or fmShareDenyWrite);
  try
    SaveToStream(Stream);
  finally
    Stream.Free;
  end;
end;

procedure LoadFromStream(Stream: TStream);
var
  n, Count: Integer;
  Spielkarte: TSpielkarte;
begin
    // DataCount
    Stream.ReadBuffer(Count, SizeOf(Integer));
    // Data
    Data.Clear;
    for n := 0 to Count - 1 do
    begin
      Stream.ReadBuffer(Spielkarte, SizeOf(TSpielkarte));
      Data.Add(Spielkarte);
    end;
end;

procedure LoadFromFile(const FileName: string);
var
  Stream: TStream;
begin
  Stream := TFileStream.Create(FileName, fmOpenRead or fmShareDenyNone);
  try
    LoadFromStream(Stream);
  finally
    Stream.Free;
  end;
end;


Delphi-Quellcode:

type
  TSpielkarte = record
    Value: String[20]; //ShortString
    DateTime: TDateTime;
    Nr: Integer;
  end;

//das geht in Delphi7 noch nicht (Generics)
uses
  generics.defaults, generics.Collections;
...
var
  Data: TList<TSpielkarte>;
...
Data: TList<TSpielkarte>.Create;
...
Data.Free;
...


//zb. String Schreiben
    StrLen := Length(TempString);
    Stream.WriteBuffer(StrLen, SizeOf(Integer));
{$IFDEF ZEROBASEDSTRINGS}
    Stream.WriteBuffer(TempString[0], StrLen * SizeOf(Char));
{$ELSE}
    Stream.WriteBuffer(TempString[1], StrLen * SizeOf(Char));
{$ENDIF}


//zb. String Lesen
    Stream.ReadBuffer(StrLen, SizeOf(Integer));
    if StrLen > -1 then
    begin
      SetLength(TempString, StrLen);
{$IFDEF ZEROBASEDSTRINGS}
      Stream.ReadBuffer(TempString[0], StrLen * SizeOf(Char));
{$ELSE}
      Stream.ReadBuffer(TempString[1], StrLen * SizeOf(Char));
{$ENDIF}
    end
    else
      TempString := '';
Thomas Levering
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: TListe als Datei Speichern

  Alt 16. Nov 2013, 09:01
Es geht doch nicht nur um das Speichern einer Spielkarte, sondern eines ganzen Stapels (evtl. sogar noch Meta-Informationen über die Spielstufe, etc.)
So hatte ich's auch gemeint:
Delphi-Quellcode:
procedure TSpielkartenListe.SaveToFile(const FileName: string);
var
  Stream: TFileStreamEx;
  I: integer;
begin
  Stream := TFileStreamEx.Create(FileName, fmCreate);
  try
    WriteHeader(Stream);
    Stream.WriteInteger(Count);
    for I := 0 to Count - 1 do
      FItems[I].SaveToFileStream(Stream);
  finally
    Stream.Free;
  end;
end;
  Mit Zitat antworten Zitat
Antwort Antwort

 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 04:16 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