Vector in Datei speichern



  • Hallo zusammen,

    nachdem ich heute morgen schon einige Stunden nach XML, filestream etc gegoogelt habe, verzweifle ich so langsam.

    Ich möchte:

    1.) einen Vector, der wiederum vectoren enthält, die objekte beinhalten, in eine Datei speichern
    2.) diese Datei später laden um den Vector zu beschreiben

    Das größte Problem dabei ist, dass der Vector nicht immer die gleiche Größe besitzt:

    Bsp.:
    Vector ÜBERGEORDNET
    -> Vector 0
    > Objekt0
    > Objekt1
    > Objekt2
    -> Vector 1
    > Objekt0
    > Objekt1
    -> Vector 2
    > Objekt0

    Den Vector irgendwie in eine File zu packen habe ich mittlerweile hinbekommen (Ich benutze den QTCreator und die darin enthaltene Bibliothek)

    void saveFile()
    {
        QFile file( "file.dat" );
        file.open( QIODevice::WriteOnly);
        QDataStream stream( &file );
        for(int i = 0; i<frameList->size();i++)
        {
            vector<streetObject*> * objectListVector = frameList->at(i);
            for (int j = 0; j < objectList->size();j++)
            {
                stream << *objectListVector->at(j);
            }
        }
    
    }
    

    aber wenn ich das so auslesen möchte, dann weiß das Programm nicht, wieviele Objekte in dem jeweiligen Vector enthalten sind und überschreiben diesen.... 😕

    Irgendwelche Tipps?
    Sorry, wenn das jetzt unverständlich sein sollte, ich erkläre das gern auch nochmal anders bei Bedarf 🙂

    Vielen Dank schonmal!



  • Speicher halt die Größe mit.


  • Mod

    Oder ein Trennzeichen. Das hat den Vorteil, dass man die Datei leichter editieren kann.



  • Daran hatte ich auch schon gedacht. Allerdings hatte ich irgendwie gehofft, das ganze relativ einfach und elegant zu machen.

    Hört sich jetzt vielleicht ein bißchen dumm an... ABER
    Wenn ich mir beim Debuggen die Werte anschaue, dann stellt es mir den Vector mit allen Untergruppierungen etc dar.. Es sollte da doch eine Möglichkeit geben, dieses Struct sehr einfach zu speichern!?



  • Wie kann ich das "EOF"-Tag auslesen!?
    Ich möchte jedesmal wenn er an das Ende des Vectors kommt einen neuen erstellen, der dann gefüllt werden soll!

    void loadXMLFile()
    {
        QFile file( "file.dat" );
        file.open( QIODevice::ReadOnly);
        QDataStream stream( &file );
        streetObject temp;
        QString catchPhrase;
    
        frameList = new vector<vector<streetObject*>* >;
        objectList = new vector<streetObject*>;
    
        while(stream.atEnd()==false)
        {
    
            if(stream=="EOF")
            {
                frameList->push_back(objectList);
                objectList = new vector<streetObject*>;
            }
    
            else
            {
                stream >> temp;
                objectList->push_back(&temp);
            }
    
        }
    }
    
    void saveXMLFile()
    {
        QFile file( "file.dat" );
        file.open( QIODevice::WriteOnly);
        QDataStream stream( &file );
        for(int i = 0; i<frameList->size();i++)
        {
            vector<streetObject*> * objectListVector = frameList->at(i);
            for (int j = 0; j < objectList->size();j++)
            {
                stream << *objectListVector->at(j);
            }
            stream << "EOF";
        }
    
    }
    

Log in to reply