Hallo Oliver, Ich habe auch nicht viel Ahnung von C/C++ etc.. Dein Problem liegt darin, dass '\n' nicht gleich '\n' ist. Das '\n' in der Textdatei sind zwei Zeichen ('\' + 'n'), das im C-Programm hingegen nur eines. Oliver Meißner-Knippschild schrieb:
Hallo Liste,
ist etwas OT, aber eigentlich nur ein kleineres Problemchen mit C++, bei dem Google nicht wirklich weiterhilft...
ein mittels getline() aus einer Textdatei eingelesener String ignoriert bei der Ausgabe die Escape-Sequenzen. In der Textdatei steht z.B. diese Zeile: Test mit Zeilen\numbruch in der Textdatei ^^ --Das \n ist wichtig ;)
Das sind zwei Zeichen!
nun folgendes Problem:
int main(int argc, char *argv[]) { ifstream f; string s; f.open(argv[1], ios::in); // Öffne Datei aus Parameter while (!f.eof()) { getline(f, s); if (i == 1) { getline(f, s); s = "fester\nZeilenumbruch.\n\nNun aus s:\n" + s;
Das sind (jeweils) nur ein Zeichen! Du musst also den eingelesenen String auf Escape-Sequenzen untersuchen un diese dann besonderes behandeln. Ich weiß nicht, ob es eine Funktion gibt die das bereits selbst beim Lesen erledigt. Eine Schleifen wie: while (*s) { if ( *s == '\\' ) { // Ich hoffe, ich habe hier die richtige Schreibweise für '\' getroffen switch (*s++) { case 'n': cout << newline; break; // ggf. weitere Escape-Sequenzen default: cout << '\'; cout << *s; } s++; } } Ich weiß nicht, ob die Syntax korrekt ist.
cout << s; } //if } //while f.close(); return 0; } //int main Ich erwarte folgende Ausgabe:
--- fester Zeilenumbruch.
Nun aus s: Test mit Zeilen umbruch in der Textdatei ---
herauskommt aber dies hier:
--- fester Zeilenumbruch.
Nun aus s: Test mit Zeilen\numbruch in der Textdatei ---
Also der mit getline() eingelesene Teil wird nicht "escaped".
Kann mir da evtl jemand weiterhelfen?
Gruß, Olly
-- Um die Liste abzubestellen, schicken Sie eine Mail an: suse-linux-unsubscribe@suse.com Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: suse-linux-help@suse.com