Seite 1 von 1

Auslesen QTextStream -> QStringList: while überspringt We

Verfasst: 30. August 2010 17:28
von barahir1983
Hallo an alle,

ich habe folgendes Problem: Ich will aus einer Datei den Header auslesen (also alles bis zum String "%%"). Diese Datei ist bereits offen und in einem QTextEdit verfügbar. Daher benutze ich zum Auslesen ein QTextStream mit einem String als "Trägermasse". Um jetzt weitere Aktionen darauf ausführen zu können (ich muss Werte der Form "Eigenschaft: Wert;" parsen) will ich die einzelnen Zeilen in eine QStringList überführen, was mittels einer while-Schleife passiert:

Code: Alles auswählen

void NaProg::gregorio_extract()
{
    QString file_content = NULL;
    QTextStream gabc_content(&file_content);
    QStringList gregorio_header;
    gabc_content << activeMdiChild()->toPlainText();
    int info_count = 0;
    while (!gabc_content.atEnd())
    {
        if (gabc_content.readLine() == "%%") break;
        gregorio_header << gabc_content.readLine();
        QMessageBox::information(this,tr("Notatio Antiqua Debugging"),
                                 tr("Inhalt der Variable, Feld %1: \n %2")
                                 .arg(info_count)
                                 .arg(gregorio_header[info_count]));
        if (gregorio_header[info_count] == "") break;
        ++info_count;
     }   
}
Diese While-Schleife bereitet mir nun Bauchschmerzen: nur jede zweite Zeile aus der Datei wird in die StringList übernommen; wo der Fehler allerdings liegt, kann ich nicht sagen.

Gibt es vielleicht auch andere Weisen, das oben beschriebene Problem anzugehen bzw. hat jemand vielleicht eine Idee, wo der Fehler liegen könnte?

Liebe Grüße und schon mal vielen Dank!

David


EDIT: Wäre vielleicht noch vonnutzen: Ich verwende QT in Version 4.6.3 auf einem Mac mit Snow Leopard. IDE ist QT Creator 2

Verfasst: 30. August 2010 18:21
von Christian81
Du machst zweimal readLine() in der Schleife - warum wunderst Du dich also?
Des weiteren

Code: Alles auswählen

QString file_content = NULL; 
Das kompiliert überhaupt??

Code: Alles auswählen

if (gregorio_header[info_count] == "")
Besser: QString::isEmpty()

Verfasst: 30. August 2010 18:53
von barahir1983
Oh, verdammt! Das führt ja auch schon aus...
Ich bin ziemlich unbeleckter Neuling, was sowohl QT als auch C++ angeht, darum bitte ich um Entschuldigung für die falsche Initialisierung. Dachte NULL ist auch ein Null-String. Etwa nur eine Zahl? Ich gelobe Besserung :-)

Danke für die schnelle Hilfe!

Code sieht jetzt so aus und funktioniert auch erstmal:

Code: Alles auswählen

void NaProg::gregorio_extract()
{
    QString file_content;
    QTextStream gabc_content(&file_content);
    QStringList gregorio_header;
    gabc_content << activeMdiChild()->toPlainText();
    int info_count = 0;
    while (!gabc_content.atEnd())
    {
        gregorio_header << gabc_content.readLine();
        if (gregorio_header[info_count] == "%%" || gregorio_header[info_count].isEmpty()) break;
        ++info_count;
     }   
}