Einzelnen Beitrag anzeigen
Alt 19.01.2010, 18:17   #5 (permalink)
tele
Polsterwaffenkampfsportle r
 
Benutzerbild von tele
 

Registriert seit: 29.10.2003
Beiträge: 14.561

tele hat eine strahlende Zukunft
tele hat eine strahlende Zukunfttele hat eine strahlende Zukunfttele hat eine strahlende Zukunfttele hat eine strahlende Zukunfttele hat eine strahlende Zukunft

Standard AW: [C++]Komplexe Datenstrukturen Speichern/laden

Serialisierung hat halt nur das Problem, dass bei einer Änderung am Code der zu serialisiernden Klasse, eventuell bereits serialisierte Klassen nicht mehr deserialisiert werden können.
Einfach ausgedrückt: Änderst du was am Code, kannst du eventuell gespeicherte Sachen net mehr laden.

Also macht man, wenn man davon nicht abhängig sein möchte entsprechende Speicher/Lademethoden.

d.h. die Klasse braucht eine Methode, welche ihre gesammten zu speichernden Attribute in das Zielformat (z.b. properties-file oder XML oder was eigenes oder ...) bringt.
Im Hauptprogramm ruft man dann eine Methode auf, welche
- den Kopf/Fuß des speicherformates erstellt (Datenbankverbindung, Datei erstellen, XML Document anlegen oder was auch immer)
- für alle Einträge in dem Array die jeweilige Speichermethode des Objektes aufruft
- das alles in das Zielformat schreibt.

Beim Laden wiederum musst du natürlich im Hauptprogramm die jeweiligen Teile für jedes Objekt auseinanderstückeln und jedes objekt sich selbst erstellen lassen (mit geeignetem Konstruktor oder entsprechenden Methoden)

Ich hab keine Ahnung von C++, aber in Java-Pseudo-Code würde das so aussehen:

fall: speichere als properties-file (Plain text im format "Name = Wert"

Zu Speichernde Klasse
Code:
class Container {
 private String attribut1;
 private String attribut2;

 public String getSaveData(){
  String ret = "#####\n attribut1 = "+attribut1+"\n attribut2 = "+attribut2";
  return ret;
 }

 public static Container load(String LoadData){
  Container self = new Container();
  
  String[] splits = LoadData.split(" ")
  
  self.attribut1 = splits[3];
  self.attribut2 = splits[6];
  return self;
 }
}
Hauptprogramm
Code:
public class MyPasswordProgramm{

 public static Container[] passwords;
 
 public static void main(String[] args){
  if(args[0].equals("load")){
   String fileContent = pseudoCodeToLoadStringFromFile("MyFile.txt");
   String[] fileContentSplits = fileContent.split("#####");
   passwords = new Container[fileContentSplits.length];
   for(int i=0; i<fileContentSplits.length; i++){
     Container currentPassword = Container.load(fileContentSplits[i]);
     passwords[i] = currentPassword;
   }
  } else if(args[0].equals("save")) {
    String content = "";
    for(int i=0; i<passwords.length; i++){
      content = content + password[i].getSaveData();
    }
    pseudoCodeToWritetoFile(content, "MyFile.txt");
  }
 }
}
tele ist offline   Mit Zitat antworten
Für diesen Beitrag bedankt sich:
Soman_X (20.01.2010)