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