fstream-Problem
-
Ich habe eine normale txt-file der Form:
#2009-Nov-28 15:24:26Normalerweise soll die Position des # ermittelt werden und später verwendet um zu prüfen ob es immernoch der Gleiche Tag ist. Aber ich komme immer auf die Falsche Position und es wird immer der Falsche Output erzeugt.
#2009-Nov-28 15:35:03 #2009-Nov-28 15:35:04anstatt von:
#2009-Nov-28 15:35:03 15:35:04Hier mal der kritische Code... habe auch schon konstrukte mit getline() gehabt doch da hat es teilweise einfach die # übersprungen...
std::ifstream gamma; r_file.open("test.txt"); if(r_file.is_open()){ std::size_t dummy = std::string::npos; char c; while(!r_file.eof()){ c = r_file.get(); if('#'== c){ dummy = r_file.tellg(); //std::cout << dummy2 << ":" << c << std::endl; } } [...]Mit der cout zeile kommen eig immer ergebnisse wie : "#:5", die ja eigentlich "c:0" sein müssten.
-
Ich denk es muss irgendwie an den .tellg() methoden liegen... hat jmd eine Lösung parat? Es dürfte ja eigentlich nicht passieren das durch den Aufruf von Get die interne Position des Get-Pointers um 7 verschiebt... oder?
-
Wie wäre es mal, dafür schlicht ANSI-C zu verwenden?
Du brauchst dann zwei Strings, einen für die Eingabe und einen für die aufbereitete Ausgabe (ohne #). Lässt sich einfach in einer Schleife erledigen mit Einfügen des Nullzeichens '\0' versteht sich. Die Länge des Eingabestrings bekommst du mit len = strlen(Eingabestring). Ist eine einfache Angelegenheit. Dafür braucht man nicht die String-Klasse von C++.
-
Ich weiß nicht ob das wirklich die Lösung ist, da ich das letzte vorkommen eines bestimmten, formatierten Teil einer Datei haben will, um zu sehen ob dieser noch gültig ist oder ein neuer eingefügt werden muss. Die Eingabe ist in diesem Fall nicht von mir sondern von Boost "gemacht".
-
Das .TXT im Namen der Datei deutet doch darauf hin, dass es sich um eine reine
Textdatei nach ASCII handelt. Wenn dem so ist, hier mein Vorschlag:ifstram datei; char zeile[80],ausgabe[80],zeichen; int len,i; .... datei.open("test.txt"); while(!datei.eof()) { datei.getline(zeile,sizeof(zeile)); // die einzelnen Zeilen der Datei len = strlen(zeile); for(i=0;i<len;i++) { zeichen=zeile[i]; // die einzelnen Zeichen einer Zeile .... // hier die Ausgabe aufbereiten } .... }So sollte es laufen. Natürlich geht das mit pointern in der for-Schleife noch etwas eleganter.
Achtung: An die Ausgabe das Nullzeichen '\0' anhängen!