Dateiende auf newline überprüfen und bei Fehlen einfügen
-
Wie genau kann ich das letzte Zeichen einer ASCII Datei auf eine newline überprüfen?
std::fstream ss( file ); ss.seekg( 0, std::ios::end-sizeof(char) ); if( ss.get()!='\n') { ss.seekp( 0, std::ios::end ); ss << '\n' << endl; }funzt leider nicht. Optimal wäre es wenn auch eine Leerzeile als gültiges Ende angesehen wird
Hiermit möchte ich das Problem einiger Parser umgehen, die abstürzen sobald die letzte Anweisung in der letzten Zeile steht
-
Newliner schrieb:
funzt leider nicht
Bedeuted?
-
Du könntest die Datei ja zeichenweise einlesen und wenn das Dateiende erreicht ist, könntest du das letzte Zeichen überprüfen:
char c; while(!ss.eof()) { ss.get(c); } if(c!='\n') { //Keine Leere Zeile am ende }Das müsste so klappen. Aber vielleicht reicht es ja auch, wenn du einfach noch ein '\n' an die Datei anhängst? Dann hättest du mindestens 1 Leerzeile. (Ist zwar nicht ganz so sauber, aber vielleicht reicht das ja.)
MfG, Jochen
-
"funzt nicht" im Sinne von: er erkennt bei mir NIE ob ein '\n' oder keins vorhanden ist
-
versuch es mal so:
ss.seekg( -1, std::ios::end);
-
So kann man es z.B. machen:
#include <fstream> using namespace std; int main() { char c , d = '\n'; fstream datei("c:/testl.txt"); datei.seekg(-1, ios::end); datei.read(&c, 1); if (c != d) { datei.seekp(0, ios::end); datei.write(&d, 1); } datei.close(); }