Umlaute finden
-
Danke für deine Hilfe, aber er gibt mir immer eine Exception bei string.replace
aus.
-
Du musst überprüfen, ob der von find zurückgegebene Wert ungleich std::string::npos ist.
-
Von alledem mal abgesehen ist das was du da machst bestenfalls nicht portabel. Standard-C++ kennt keine Umlaute, ä gehört nicht zum unterstützten Zeichensatz.
-
if (suchen.find("ä") != string::npos)Dort springt er nicht rein, woran kann das liegen?
Bei insert & erase gibt es ebenfalls eine out of range Exception.Danke für die Hilfe
-
PEterMaier schrieb:
Dort springt er nicht rein, woran kann das liegen?
Versuch doch mal mit dem Debugger in das find reinzumarschieren. Der Bibliothekscode sieht zwar etwas unleserlich aus, aber nicht so schlimm dass mans nicht verstehen könnte.
-
Das hat mir nicht wirklich geholfen..
-
if (suchen.find("ä") != string::npos)Was ist eigentlich "npos"?
-
PEterMaier schrieb:
Das hat mir nicht wirklich geholfen..
Warum nicht?
Gib uns mal bitte minimalen, compilierbaren Code, mit dem wir das Problem nachvollziehen können, und sag uns welchen Compiler du benutzt.
-
Ich benutze Borland 6, aber ich lese die Zeilen ja aus einer XML-Datei dann bringt dir der Code ja nichts.
string suchen; getline(p,suchen); suchen.replace(suchen.find("ä"),1,"ae"); lblLabel1->Caption = suchen.c_str();
-
so natürlich:
string suchen; getline(p,suchen); if (suchen.find("ä") != string::npos) { suchen.replace(suchen.find("ä"),1,"ae"); lblLosungstext->Caption = suchen.c_str(); }
-
Der Code ist weder compilierbar noch minimal. Ersetz z.B. mal das getline durch eine einfache Zuweisung.
und/oder gib den Sting nach dem getline erstmal auf der Konsole aus und schau ob er tatsächlich so aussieht wie du denkst.
Je nachdem wie deine Datei codiert ist, liest der istream da ggf. eben kein "ä" sondern irgendwelchen Salat ein.
-
Muss es auf der Konsole sein, da ich es ja nicht auf der Console schreibe?
-
PEterMaier schrieb:
Muss es auf der Konsole sein, da ich es ja nicht auf der Console schreibe?
Nein, aber irgendwo wo du es im Klartext lesen kannst. Also nicht in irgendeinem Windows-Fenster, da Windows das alles wieder codiert.
-
Eine XML-Datei ist vermutlich in Unicode (UTF-8 oder UTF-16) kodiert. Das 'ä' im Programm ist aber wohl eher ISO8859-15. Wenn du die XML-Datei also beim Einlesen nicht umkodierst, wirst du die Umlaute nicht finden.
-
Auf der Console wird der Text ganz normal dargestellt, außer für die Umlaute komische Zeichen.
@manni66 Wie kodiere ich sie um?
-
PEterMaier schrieb:
@manni66 Wie kodiere ich sie um?
Eine XML-Datei sollte man mit einem XML-Parser lesen. In dessen Dokumentation sollte stehen, wie man die Daten in verschiedenen Zeichensätzen erhalten kann.
Ansonsten gibt's auf Unixen iconv zum konvertieren.
-
Hmm und eine andere Möglichkeit Umlaute zu finden gibt es nicht??
-
PEterMaier schrieb:
Hmm und eine andere Möglichkeit Umlaute zu finden gibt es nicht??
Die Frage verstehe ich nicht. Du findest nur das Gesuchte. Wenn du in einem UTF-8 String einem Umlaut-A suchst, musst du halt "\xc3\xa4" angeben oder den UTF-8 String in den internen Zeichensatz konvertieren.
XML-Dateien zu Fuß einzulesen ist halt so ziemlich das dümmste das man machen kann.