Vector von struktur in einer datei speichern



  • Hallo!

    ich möchte eine Vector von Struktur und eine drei andere intger Variablen in einer Datei schreiben bzw. speichern und wieder auslesen! kann jamend mir sagen wie ich das in c++ machen kann , ein Beispiel wäre nicht schlecht.

    Danke schönmal im Voraus

    Gruß
    Seb



  • Und jetzt hätten wir den Beitrag gerne in einer Form, aus der man auch etwas herauslesen kann.

    OK, ich versuch's trotz des Kauderwelch: Für die Dateiverarbeitung gibt es in C++ die Klassen std::ofstream (schreiben/speichern) und std::ifstream (lesen). Dort kannst du alle Elemente deiner Struktur mit den Stream-Operatoren >> und << verarbeiten.



  • Wenn du lesen und schreiben mit dem selben Objekt willst gibt es noch std::fstream .



  • sebleb schrieb:

    ich möchte eine Vector von Struktur und eine drei andere intger Variablen in einer Datei schreiben bzw. speichern und wieder auslesen! kann jamend mir sagen wie ich das in c++ machen kann , ein Beispiel wäre nicht schlecht.

    Hallo Seb,

    hier ein Besipiel:

    #include <algorithm> // copy
    #include <fstream>
    #include <iostream>
    #include <iterator> // ostream_iterator
    #include <vector>
    
    struct Struktur
    {
        Struktur( int i_=0, double d_=3.14 )
            : i( i_ ), d( d_ )
        {}
        int i;
        double d;
    
        // Struktur mit operatoren zum Lesen und Schreiben derselben ausstatten
        friend std::ostream& operator<<( std::ostream& out, const Struktur& s )
        {
            return out << s.i << " " << s.d; // Bem.: Space ist notwendig zur Trennung der Werte
        }
        friend std::istream& operator>>( std::istream& in, Struktur& s )
        {
            return in >> s.i >> s.d; // Bem.: Space/Lf wird automatisch überlesen
        }
    };
    
    int main()
    {
        using namespace std;
        const char* filename = "strukturen.txt";
        {
            int a = 31, b = 42;
            vector< Struktur > strukturen;
            strukturen.push_back( Struktur( 4, 1.2 ) );
            strukturen.push_back( Struktur( 5, 1.3 ) );
            // -- Schreiben
            ofstream file( filename );
            file << a << " " << b << endl; // Bem.: ob Space oder endl als Trenner ist egal
            file << strukturen.size() << endl; // Anzahl schreiben ist eine gute Sache
            copy( strukturen.begin(), strukturen.end(), ostream_iterator< Struktur >( file, "\n" ) );
        }
        {
            int a, b;
            vector< Struktur > strukturen;
            // -- Lesen
            ifstream file( filename );
            if( !file.is_open() )
            {
                cerr << "Fehler beim Oeffnen der Datei " << filename << endl;
                return -1;
            }
            file >> a >> b;
            size_t n;
            file >> n; // Anzahl lesen
            for( Struktur s; n && file >> s; --n )
                strukturen.push_back( s );
            if( file )
            {
                cout << "Alles gelesen a=" << a << " b=" << b << endl;
                cout << "vector< Struktur >.size() = " << strukturen.size() << endl;
            }
        }
        return 0;
    }
    

    Gruß
    Werner


Log in to reply