![]() |
Delphi-Version: 6
TListe als Datei Speichern
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 |
AW: TListe als Datei Speichern
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. |
AW: TListe als Datei Speichern
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. |
AW: TListe als Datei Speichern
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? |
AW: TListe als Datei Speichern
Zitat:
Grüße |
AW: TListe als Datei Speichern
TSpielkarte.SaveToFile ist dein Freund. Zeig mal die Klasse TSpielkarte, dann kann man mehr dazu sagen?
|
AW: TListe als Datei Speichern
Zitat:
@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. |
AW: TListe als Datei Speichern
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 := ''; |
AW: TListe als Datei Speichern
Zitat:
Zitat:
Zitat:
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. |
AW: TListe als Datei Speichern
Zitat:
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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:01 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