Zeilenende in QT (QString)
Zeilenende in QT (QString)
Hallo QT´ler,
ich habe folgende Aufgabe zu lösen: Ein Text soll zeichenweise durchsucht werden, so sollen auch Zeilenendezeichen erkannt werden. Ich habe meinen bisherigen Ansatz über QString gelöst, habe aber das Problem, dass mir das Auslesen die Zeilenenden ignoriert, also so tut, als wären sie nicht da. Es wird einfach das nächste Zeichen ausgegeben. Da ich aber u.a. bei Auftreten eines Zeilenendes eine Aktion auslösen muss, funktioniert das hier nicht.
Muss ich einen anderen Weg wählen (z.b. QTextStream oder andere) oder kann ich innerhalb eines QString ein Zeilenende erkennen?
Ich trete da im Moment ziemlich auf der Stelle. Es ist durchaus möglich, dass ich dabei auch auf der Leitung stehe. Wenn jemand von Euch mir da eine Tipp geben kann, wäre ich richtig dankbar.
Grüße Stefan
ich habe folgende Aufgabe zu lösen: Ein Text soll zeichenweise durchsucht werden, so sollen auch Zeilenendezeichen erkannt werden. Ich habe meinen bisherigen Ansatz über QString gelöst, habe aber das Problem, dass mir das Auslesen die Zeilenenden ignoriert, also so tut, als wären sie nicht da. Es wird einfach das nächste Zeichen ausgegeben. Da ich aber u.a. bei Auftreten eines Zeilenendes eine Aktion auslösen muss, funktioniert das hier nicht.
Muss ich einen anderen Weg wählen (z.b. QTextStream oder andere) oder kann ich innerhalb eines QString ein Zeilenende erkennen?
Ich trete da im Moment ziemlich auf der Stelle. Es ist durchaus möglich, dass ich dabei auch auf der Leitung stehe. Wenn jemand von Euch mir da eine Tipp geben kann, wäre ich richtig dankbar.
Grüße Stefan
Kleiner Nachsatz. Das Problem scheint nicht im QString zu liegen, da geht es durchaus. Die Zeilenenden scheinen beim Einladen verloren zu gehen:
QString loadedText;
QFile file(filename);
QTextStream in(&file);
file.open(QIODevice::ReadOnly);
while (!in.atEnd()) {
loadedText.append(in.readLine());
}
file.close();
So habe ich die Ladefunktion aufgebaut, und da sind keine Zeilenenden mehr drinne
Also, wie gesagt, wenn jemand einen Tipp hat...
Grüße Stefan
QString loadedText;
QFile file(filename);
QTextStream in(&file);
file.open(QIODevice::ReadOnly);
while (!in.atEnd()) {
loadedText.append(in.readLine());
}
file.close();
So habe ich die Ladefunktion aufgebaut, und da sind keine Zeilenenden mehr drinne
Also, wie gesagt, wenn jemand einen Tipp hat...
Grüße Stefan
-
FlorianBecker
- Beiträge: 1213
- Registriert: 2. Dezember 2004 10:54
- Kontaktdaten:
Hallo Florian,
danke fuer deine Antwort. Ich glaube aber, dass ich mein Problem nicht gut genug dargestellt habe: Der einzulesende String ist ein Text in einem bestimmten Format, d.h. es gibt mehrere Zeilen, die einzeln zu erfassen sind und nur am Zeilenende zu erkennen sind. Ich muss also diesen Text auflösen in mehrere Einzelstrings. Im Ursprungstext sind die Zeilenenden vorhanden, das habe ich mit kate (KDE) als auch mit einem hex-Editor geprüft, nur nachdem einlesen sind sie halt weg.
Sorry, dass ich anscheinend zu umständlich formuliert hatte.
danke fuer deine Antwort. Ich glaube aber, dass ich mein Problem nicht gut genug dargestellt habe: Der einzulesende String ist ein Text in einem bestimmten Format, d.h. es gibt mehrere Zeilen, die einzeln zu erfassen sind und nur am Zeilenende zu erkennen sind. Ich muss also diesen Text auflösen in mehrere Einzelstrings. Im Ursprungstext sind die Zeilenenden vorhanden, das habe ich mit kate (KDE) als auch mit einem hex-Editor geprüft, nur nachdem einlesen sind sie halt weg.
Sorry, dass ich anscheinend zu umständlich formuliert hatte.
-
FlorianBecker
- Beiträge: 1213
- Registriert: 2. Dezember 2004 10:54
- Kontaktdaten:
Nochmals danke fuer deine schnelle Antwort. Das wäre ein Gedanke, würde aber einen enormen Umbau meiner Klasse erforderlich machen. Das schaue ihc mir aber auf jeden Fall an. Irgendwie bildete ich mir ein, dass es vorher schon mal mit QString funktionierte, vielleicht habe ich auch ein Speicherleck im Hirn; mal sehen was Valgrind dazu sagt... 
Gruß Stefan
Gruß Stefan
Die normalen String-I/O-Funktionen lesen doch immer genau eine Zeile ein. Nachdem Du also ein readLine gemacht hast, befindet sich genau eine Zeile in Deinem Lesepuffer und der Lesezeiger wird auf den Anfang der nächsten Zeile gesetzt.
Du kannst dann ohne Probleme die benötigten Operationen auf die eingelesene Zeile durchführen. Irgendwelche besonderen Maßnahmen brauchst Du eigentlich nicht mehr auszüführen.
Du kannst dann ohne Probleme die benötigten Operationen auf die eingelesene Zeile durchführen. Irgendwelche besonderen Maßnahmen brauchst Du eigentlich nicht mehr auszüführen.
-
Emperor_L0ser
- Beiträge: 51
- Registriert: 28. Juli 2005 12:26
- Kontaktdaten: