voelki Geschrieben 8. Juni 2001 Teilen Geschrieben 8. Juni 2001 Hi, wie kann ich Attribute einer Klasse dynamisch in eine Datei speichern?? Z.B. enthält die Klasse einen dynamischen Vektor, man weiss also vorher nicht wieviele Werte dort drinstehen. Vieleicht weiss ja jemand was...ich bin kurz vorm verzweifeln, hattes mit Semikolon und endl als Trennzeichen versucht, nach einer Woche hab ichs jetzt aufgegeben...;(( mfg Völki Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
voelki Geschrieben 8. Juni 2001 Autor Teilen Geschrieben 8. Juni 2001 ja, und das ganze sollte natürlich in c++ mit fstream oder cfile passieren... Danke Völki Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
maddin Geschrieben 8. Juni 2001 Teilen Geschrieben 8. Juni 2001 wenn ich das richtig verstanden habe dann müsste das mit endl als Trennzeichen doch gut funktionieren. Einfach beim Speichern die Werte nacheinander in die Datei schreiben. Beispiel: //Datei save.txt 1. Eintrag 2. Eintrag 3. Eintrag Falls noch statische Attribute vorhanden sind sollten dies vor den dynamischen in die Datei geschrieben werden. Zum Laden erst die vielleicht vorhanden statischen Attribute lesen und danach solange die Datei nicht am Ende ist, die dynamischen Attribute lesen. (while !cin.eof()) Codebeispiel: #include <fstream.h> class Vektor; // speichern void speichern (const Vektor v, char* datei) { fstream file (datei, ios: :out); v.GotoFirstElement(); Vektorelement tmp; while ( ! v.IsNotAtEnd() ) { tmp = v.GetElement(); file<<tmp<<endl; v.GotoNextElement(); } } // laden void laden (Vektor *v, char* datei) { fstream file (datei, ios::in); Vektorelement tmp; while ( !file.eof() ) { file>>tmp; v->Insert (tmp); } } [ 08. Juni 2001: Beitrag editiert von: maddin ] Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
voelki Geschrieben 8. Juni 2001 Autor Teilen Geschrieben 8. Juni 2001 Naja, ich habe halt 4 Attribute mit Dynamischer Länge und einen Vektor mit Beliebig vielen Einträgen... Das Problem dabei ist dann nur das löschen/ändern, irgendwie weiss ich dann nie wo ich löschen muss. Vor allem die Datei wird ja nicht zeilenweise bearbeitet, d.h. ich kann eine zeile nicht einfach verkürzen, oder verlängern...;( Also so hatte ich das bis jetzt: 1;Attribut1;Attribut2;Attribut3; //endl 0;63; //Werte des Vektors Wenn ich jetzt einen Datensatz ändern will (1;Attribut....//hier drüber) und der neue Datensatz is länger, dann haue ich voll in den zweiten Datensatz... mfg Völki Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Crush1 Geschrieben 8. Juni 2001 Teilen Geschrieben 8. Juni 2001 Arbeite doch mit 2 Dateien. Mach die erste so wie gehabt und laß einfach die Attribute Offset-Werte in Datei 2 sein. Ändert sich dann ein Attribut wird nur hinten rangehängt und der Offset darauf gesetzt. Wenn jetzt noch ein Kennzeichen als Löschkennzeichen auf das alte Attribut gesetzt wird, mußte man halt gelegentlich eine Garbage Collection durchführen und den Müll rausschmeißen. Aber dafür geht´s hurtig wenn sich was ändert! Mit Zeigern zu arbeiten ist bei dynamischen Werten immer von Vorteil. Man könnte das ganze auch mit einer Linked-List (single oder double-ended) genausogut realisieren. Wenn man wollte könnte man Änderungen in freigegebenen Dateibereichen reinschreiben - am besten mit der richtigen Größe falls vorhanden, damit alles möglichst optimal ausgenutzt wird. Aber trotzdem wird hier auch eine GB irgendwann benötigt. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
voelki Geschrieben 8. Juni 2001 Autor Teilen Geschrieben 8. Juni 2001 Also, das sagt mir auchnicht viel mehr...hm, verkettete Liste da bin ich ganz fit, die komplett speichern, oder wie?? Oder könnte man das auch einfach mit anderen stl container machen und die einfach komplett in die Datei schreiben...?? mfg Michael Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Crush1 Geschrieben 8. Juni 2001 Teilen Geschrieben 8. Juni 2001 Klar könnte man das mit CObjects - die kann man Serializen. Einfach alle Datentypen von CObject ableiten und in eine CList reinsetzen. Aber jeder hier im Chat meckert an mir rum wie speicherfressend und langsam doch C++ und STL wäre. Doch auch hier mußt Du bei jedem Zugriff die Datei kopieren weil sich die Daten genauso überschneiden könnten. STL unterstützt solche pfiffigen Dateioptionen meines Wissens nicht. Ich denke die Geschichte mit den Offsets und dem statischen Teil in einer Datei und der dynamische Teil in einer zweiten Datei wäre die einfachste Lösung (hört sich nur so kompliziert an). Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
gajUli Geschrieben 8. Juni 2001 Teilen Geschrieben 8. Juni 2001 Original erstellt von Crush1: <STRONG>Aber jeder hier im Chat meckert an mir rum wie speicherfressend und langsam doch C++ und STL wäre. ... STL unterstützt solche pfiffigen Dateioptionen meines Wissens nicht. </STRONG> Hm, also gemeckert wurde eigentlich nicht ueber Speicher- und Geschwindigkeitsbedarf der STL, sondern ueber die Anwendung derselben um jeden Preis; und jetzt gerade hast Du selbst drueber gemeckert. Warum nicht einfach den kompletten Datenbestand nach der Aenderung neu abspeichern? Ansonsten gibt es wahrscheinlich dutzende Methoden, alle mit individuellen Vor- und Nachteilen, so dass man die beste nur mit naeheren Informationen festlegen kann. Uli [ 09. Juni 2001: Beitrag editiert von: EisenUli ] Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
maddin Geschrieben 11. Juni 2001 Teilen Geschrieben 11. Juni 2001 die einfachste möglichkeit wäre es sicherlich den gesammten datenbestand am anfang des programms zu laden und am ende des programms zu speichern. ansonsten könnte man ja statt einer datei auch gleich eine datenbank nehmen. (CRecordset). wenn das möglich wäre, wurde ich sie sehr wahrscheinlich bevorzugen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.