Frage zu fstream.eof()
-
Hallo zusammen
Ich habe folgendes Problem: Ich will eine Tebelle, die in einem txt-file abgelegt ist auslesen und in einen 2D-Array speichern. Ich weiss zu Beginn jedoch nicht, wieviele Zeilen und wieviele Spalten die Tabelle hat. Deshalb lese ich die Tabelle zweimal ein, um beim ersten mal die Anzahl Zeieln und die maximale Anzahl Spalten zu ermitteln. Anschliessend initialisiere ich das Array und fülle es dann in einer zweiten Schlaufe. Hier mein Code (halt Anfängercode):
vector< vector<double> > Mat; int max_columns=0; int row_counter = 0; int column_counter = 0; infile.open("D:\\petersp\\Master-Arbeit DLD\\PF_2D\\properties_C35.txt", ios::in); if (infile.is_open()) { while(!infile.eof()) { getline(infile, s); row_counter++; size_t pos = s.find("\t"); vector<double> value; column_counter = 0; while(pos != s.npos) { string strpart = s.substr(0, pos); s = s.substr(pos+1,s.length()); value.push_back(strtod(strpart.c_str(), NULL)); column_counter++; pos = s.find("\t"); } column_counter++; value.push_back(strtod(s.c_str(), NULL)); if (column_counter > max_columns) { max_columns = column_counter; } } Mat.resize(row_counter); for (unsigned i = 0; i < Mat.size(); ++i) Mat[i].resize(max_columns); infile.seekg(0); while(infile.eof()) { getline(infile, s); size_t length = s.length(); int i=0; size_t pos = s.find("\t"); vector<double> value; while(pos != s.npos); { string strpart = s.substr(1, pos-1); s = s.substr(pos+1,length); value.push_back(strtod(strpart.c_str(), NULL)); length = s.length(); for(int j=0; j<value.size();j++) { Mat[i][j]=value[j]; } i++; } } infile.close();Das Problem ist, dass in der ersten while-Schleife das Ende des txt-Files erreicht, somit infile.eof()=1 und ein Eintritt in die zweite Schleife unmöglich wird . Kann ich das eof-Flag manuell wieder zurücksetzen um den Eintritt in die zweite Schleife zu ermöglichen?
Der Code ist vermutlich auch nicht besonders effizient. Aber das ist nciht so wichtig, es soll einfach funktionieren.
-
Das heißt Schleife...

-
SorryAber hast du evtl. auch ne Antwort auf die Frage?
-
pitaz schrieb:
SorryAber hast du evtl. auch ne Antwort auf die Frage?
Warum so kompliziert? - Schreib einfach am Anfang die Anzahl rein. Und dann kannst du ganz einfach zuerst die Zahl einlesen und die Schleife sovielmal einlesen lassen..
Ansonsten hier:
http://www.cplusplus.com/reference/iostream/ios/clear.html
-
Hallo
Danke erstmal. Und Du hast recht, wär vermutlich die bessere Variante.