Problem beim Dateiauslesen mit getline und .find
-
Ich habe folgendes Problem: Ich möchte einfach eine txt Datei auslesen, aber dabei auf ein Vorkommen bestimmter Wortteile überprüfen, um die Daten unterschiedlich abzuspeichern. Soweit so gut, leider funktioniert meine str.find Funktion in Verbindung mit getline nicht richtig. Es handelt sich um folgenden Code:
[code] string::size_type pos = 0; ifstream inp("test.txt"); for(string Zeile; getline(inp, Zeile);) { cout<<Zeile<<endl; //zur Überprüfung if((pos=Zeile.find("i", pos))!=string::npos) //Suchen nach i in der Zeile { cout<<"FOUND \"i\""<<endl; //i gefunden } [cs] } inp.close();
Die Textdatei sieht wie folgt aus:
Dies ist ein Test
Wenn ich den Code ausführe, findet er nur in der ersten Zeile das gesuchte i, danach nicht mehr. Dies ist der Fall wenn ich ihn mit visualc++ kompiliere. Wenn ich ihn mit dev-cpp kompiliere, findet er das erste und das letzte der beiden i's, aber nicht das in der Mitte.
Ich habe bereits herausgefunden, dass wenn ich den Text so abändere, dass ich an jedes Wort ein z anfüge und dieses als die Zeilenendebedingung für getline angebe, also folgendermassen:[code] ... for(string Zeile; getline(inp, Zeile,'z');) ...
er dann alle vorhandenen i's findet. Ich habe mit verschiedenen Zeilenende codes herumexperimentiert, aber keiner lieferte bei mir das richtige Ergebnis.
Weiss jemand was ich falsch mache?Gruß
wurzel
-
Statt
Zeile.find("i", pos)
solltest du
Zeile.find("i", 0)
schreiben. Dann fängt er am Anfang des Strings an zu suchen.
-
Mach mal den zweiten Parameter bei find() weg, find() gibt beim ersten Mal 2 zurück, und du übergibst es im nächsten Durchlauf wieder an find() als Startadresse für die Suche (dH er fängt erst an der 2. Position zu suchen an). Ab dort gibt es aber kein 'i' mehr.
MfG SideWinder
-
Ah! Darin liegt mein Fehler!
Danke!