Aus Txt-datei (in Objekt) einlesen?
-
Hallo ich hoffe jemand kann mir helfen.
Ich habe eine Textdatei die ich auslesen muss und zwar in ein Objekt....als Beispiel habe ich hier den Inhalt bzw Auszug der text datei:
Energie Cottbus,10,4,3,3,14,13,15
Hannover 96,10,1,4,5,9,20,7
1. FC Nuernberg,11,2,7,2,13,11,13
Hertha BSC,10,4,4,2,16,12,16dann habe ich eine Klasse:
#pragma once #include <fstream> #include <iostream> #include <sstream> using namespace std; class Mannschaft { private: char mannschaftsName[24]; int punkte, spieleGespielt, spieleGewonnen, spieleUnentschieden, spieleVerloren, toreErzielt, toreKassiert; public: //friend ostream& operator<<(ostream& out, const Mannschaft &m); //friend istream& operator>>(istream& is, Mannschaft &team); //richtig?? friend class Tabelle; };ich habe noch eine klasse weil ich die einzelnen zeilen in einen Vector abspeichern muss
#pragma once //#include "Array.h" #include <vector> #include "Mannschaft.h" #include <iostream> #include <string> using namespace std; class Tabelle { public: Tabelle(); virtual ~Tabelle(); //friend class Mannschaft; //test char test; void ZeigeTabelle(); void sortTab(); void NeueMannschaft(Mannschaft&); void toStream( ostream& os ); void fromStream(); //test int setPunkte(Mannschaft &M); bool operator() (const Mannschaft&, const Mannschaft&); //Array<Mannschaft>Mannschaftstabelle; vector<Mannschaft>Mannschaftstabelle; };..die einzelnen funktionen sind erstmal nebensächlich daher habe ich nur mal aufgeführt. ich möchte nur mal wissen wie ich in der "Main" die Txtdatei in das
Objekt , Vektor einlesen kann.
danke im vorausgruss sten
-
Ich weiß nicht, ob das die eleganteste und schnellste Lösung ist, aber etwa in folgender Art sollten sich die einzelnen Zeilen aus der Datei einlesen und "zerlegen" lassen:
#include <string> #include <iostream> #include <fstream> #include <sstream> //////////////////////////////////////////////////////// string zeile; string elemente[8]; int counter = 0; ifstream input; // File öffnen input.open("Input.txt", ios_base::in); if(!input) { cout << "\nDatei konnte nicht geöffnet werden!\n"; exit(-1); } // File einlesen bis Dateiende while(!input.eof()) { // Zeile einlesen getline(input, zeile); // Zeile zerlegen istringstream line(zeile); for(int i = 0; i < 8; i++) { // "Bereiche" zwischen den Kommata einlesen und in string-array "elemente" speichern getline(line, elemente[i], ','); } //hier musst du dann die in "elemente"-strings abgelegten Werte deinen //Membervariablen der Klasse "Mannschaft" zuweisen (bzw. den Mannschaft-Objekten //deines Vektors Mannschaftstabelle), etwa in folgender Manier: Mannschaftstabelle[counter].mannschaftsName = elemente[0]; Mannschaftstabelle[counter].punkte = atoi(elemente[1].c_str()); //usw. counter++; } input.close();Musst halt schauen, dass du das ganze am besten in eine Methode von Tabelle verpackst.
MfG, Nanuq
-
sten schrieb:
Hallo ich hoffe jemand kann mir helfen.
Ich habe eine Textdatei die ich auslesen muss und zwar in ein Objekt....als Beispiel habe ich hier den Inhalt bzw Auszug der text datei:
Energie Cottbus,10,4,3,3,14,13,15
Hannover 96,10,1,4,5,9,20,7
1. FC Nuernberg,11,2,7,2,13,11,13
Hertha BSC,10,4,4,2,16,12,16Hallo Sten,
ich schlage Dir folgendes Verfahren vor:
#pragma once #include <iosfwd> #include <string> // using namespace std; NIE im Header! class Mannschaft { private: std::string mannschaftsName; // besser std::string int punkte, spieleGespielt, spieleGewonnen, spieleUnentschieden, spieleVerloren, toreErzielt, toreKassiert; public: //friend ostream& operator<<(ostream& out, const Mannschaft &m); friend std::istream& operator>>( std::istream& is, Mannschaft &team); //richtig?? genau so! .. nur std:: fehlte friend class Tabelle; }; // File: Mannschaft.cpp #include "Mannschaft.h" #include <iostream> std::istream& komma( std::istream& in ) { char k; if( in >> k && k != ',' ) in.setstate( std::ios_base::failbit ); return in; } std::istream& operator>>( std::istream& is, Mannschaft &team ) { Mannschaft t; if( getline( is, t.mannschaftsName, ',' ) && is >> t.punkte >> komma >> t.spieleGespielt >> komma >> t.spieleGewonnen >> komma >> t.spieleUnentschieden >> komma >> t.spieleVerloren >> komma >> t.toreErzielt >> komma >> t.toreKassiert && is.ignore( 9999, std::istream::traits_type::to_int_type( '\n' ) ) ) team = t; return is; } // File: main.cpp #include "Mannschaft.h" #include <fstream> #include <iostream> #include <vector> #include <iterator> #include <algorithm> int main() { using namespace std; vector< Mannschaft > teams; ifstream datei( "input.txt" ); copy( istream_iterator< Mannschaft >( datei ), istream_iterator< Mannschaft >(), back_inserter( teams ) ); // usw. return 0; }Gruß
Werner