AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TListe als Datei Speichern

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

n/a Beiträge
 
#1

TListe als Datei Speichern

  Alt 15. Nov 2013, 20:59
Delphi-Version: 6
Hallo,
ich bin neu hier.
Ich habe folgendes Problem:
In meinem Programm Wer wird Millionär verwende ich mehrere Listen für verschiedene Fragen ,jeweils sortiert nach Geldstufe d.h. pro Liste eine Geldstufe. in diesen Listen sind die "Spielkaten" als Objekte der Klasse TSpielkarte gespeichert.
Diese Listen möchte ich als Datei Speichern jedoch überfordert mich die Klasse TStream etwas , da ich bisher nur beispiele für Arrays gefunden habe (die mir bisher nicht bekannt sind).
Es mag sich möglicherweise etwas banal anhören aber könnte man mir hier bitte erklären wie das mit dem speichern funktioniert?

mfG. Vaporizor

Bei diesem Projekt handelt es sich um eine freiwillige Hausaufgabe.

EDIT : Bei der Klasse TListe handelt es sich um eine Selbst erstellte Liste aus dem Informatik Unterricht

Geändert von Vaporizor (15. Nov 2013 um 21:02 Uhr) Grund: hab was vergesssen
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#2

AW: TListe als Datei Speichern

  Alt 15. Nov 2013, 21:12
1. Aus deinem Posting geht nicht hervor, was genau du wo speichern möchtest. Willst du einen Stream speichern, dann verwende die Methode SaveToFile.

2. Aus deinem Text geht ebenfalls nicht hervor, um welche Listen es sich handelt.

3. Eine Klasse ist keine Liste. Somit entbehrt die Aussage, "Bei der Klasse TListe handelt es sich um eine Selbst erstellte Liste" jeglichen Sinns hinsichtlich deines Problems.

4. Es gibt keine grundsätzliche Speichermethode für alles.

Fazit: Du solltest deine Anfrage schon etwas detaillierter gestalten, wenn du ernsthaft Antworten erwartest.
  Mit Zitat antworten Zitat
Vaporizor
(Gast)

n/a Beiträge
 
#3

AW: TListe als Datei Speichern

  Alt 15. Nov 2013, 21:17
1. Ich will die einzelnen Objekte der Klasste TLIste als Datei Speichern.
2. Diese Listen stammen von der selbst geschriebenen Klasse TListe.
4. Das wusste ich nicht deswegen frage ich ja.
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#4

AW: TListe als Datei Speichern

  Alt 15. Nov 2013, 22:04
Also "Objekte" speichern ist sehr allgemein. Objekt kann eine eigene Klasse sein, kann Bitmap sein, kann Text sein, kann andere Objekte enthalten.

Zu 4: gehst du mit der Frage auf die Idee aus, dass man den Inhalt des Objekts speichern kann?
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.366 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: TListe als Datei Speichern

  Alt 15. Nov 2013, 22:09
Diese Listen möchte ich als Datei Speichern jedoch überfordert mich die Klasse TStream etwas
muss es unbedingt über TStream sein? FÜr sowas würde ich XML einsetzen. Evtl. hast Du ein Delphi das TXMLDocument besitzt. Wenn ja, einfach deine Liste durchgehen deine TSpielkarte holen und die notwendigen Felder abspeichern...

Grüße
  Mit Zitat antworten Zitat
Bjoerk

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

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
 
#7

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
66 Beiträge
 
Delphi 11 Alexandria
 
#8

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
Perlsau
(Gast)

n/a Beiträge
 
#9

AW: TListe als Datei Speichern

  Alt 16. Nov 2013, 01:44
1. Ich will die einzelnen Objekte der Klasste TLIste als Datei Speichern.
Die Objekte werden bereits in deiner Unit gespeichert. Offenbar weißt du nicht, was ein Objekt in Delphi ist und verwendest diesen Begriff daher für etwas ganz anderes.

2. Diese Listen stammen von der selbst geschriebenen Klasse TListe.
Glaubst du, daß außer dir noch jemand diese Klasse TListe kennt? Richtig: Ich glaube das auch nicht. Mit anderen Worten: Wieso zeigst du uns nicht erstmal deine Klasse, bevor du fragst, wie du darin eine Speichermethode implementieren kannst?

4. Das wusste ich nicht deswegen frage ich ja.
Oben hattest du aber behauptet, du fragst, weil du nicht weißt, wie man irgend was speichert.

Auf den dritten Punkt bist du leider überhaupt nicht eingegangen, und ich ahne auch, weshalb: Du weißt offenbar ziemlich wenig über das Programmieren mit Delphi. Wie wär's damit, erstmal einige Grundlagen-Tutorials durchzuarbeiten, bevor du dich an anspruchsvollere Projekte wagst? Mit der Zeit gewinnst du dabei den Überblick, was alles wie machbar ist. Es erschließen sich dir nach und nach Konzepte und Vorgehensweisen. Wenn du das durch hast, könntest du dir ein erstes eigenes Projekt überlegen. Die zweite oder gar dritte Treppenstufe vor der ersten zu nehmen ist dagegen eine sichere Stolperfalle.
  Mit Zitat antworten Zitat
Bjoerk

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

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

 

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