Funktion um bestimmtes Format einzulesen
-
Hallo
Ich habe probierte eine Funktion zu schreiben, die ein bestimmtes Format aus einer Datei einliest.
Das Format:1 house-haus 1 tree-baum 2 car-autoDie Funktion:
void read(std::fstream& f) { std::string s; std::string m; int unit; getline(f,s); if(!isalpha(static_cast<unsigned char>(s[0]))) { std::stringstream kon(s); kon >> unit; ... getline(f,s); } if(isalpha(static_cast<unsigned char>(s[0]))) { m = s.substr(0,s.find_first_of("-")); ... s = s.substr(s.find_first_of("-")+1); ... } }Hier noch der Aufruf der Funktion:
std::fstream file; file.open("Datei.txt", std::ios::in); while(file.good()) { read(file); ... } file.close();Die Funktion funktioniert so weit aber die erste Zahl die in der Datei steht wird nicht richtig eingelesen (also welche im bsp. oben über der Vokabel "house" steht).
Findet jmd den Fehler?
Danke
-
Wenn zwischen den Texten immer genau ein '-' steht, dann geht das z.B. so:
void read( std::istream& f ) // std::(I)stream { int unit; std::string m,s; while( std::getline( std::getline( f >> unit >> std::ws, m, '-' ), s ) ) { std::cout << unit << ") " << m << "-" << s << std::endl; // ... } if( f.eof() ) // bis Ende gelesen { std::cout << "alle gut" << std::endl; } } // im main std::ifstream file("Datei.txt"); // (I)fstream if( !file.is_open() ) { cerr << "problem.." << endl; return -2; // break; } read( file );
-
lolipoplols Code funktioniert bei mir.
-
lolipoplol schrieb:
Die Funktion funktioniert so weit aber die erste Zahl die in der Datei steht wird nicht richtig eingelesen (also welche im bsp. oben über der Vokabel "house" steht).
Findet jmd den Fehler?vielleicht steht in der Datei vor der '1' eine Leerzeile. Was steht genau in dem ersten String 's' - gib das doch einfach mal aus.
-
Von solchen Schleifen bekomme ich Zahnschmerzen
while( std::getline( std::getline( f >> unit >> std::ws, m, '-' ), s ) )Warum nicht einfach barmherzig sein?
for(;;) { f >> unit >> std::ws; std::getline(f, m, '-'); if( !std::getline(f, s) ) break; // .... }Oder anders, aber wenigstens die Funktionsaufrufe auf eigene Zeilen und Statements auslagern.