Probleme mit QTextStream

Alles rund um die Programmierung mit Qt
Antworten
Killur
Beiträge: 10
Registriert: 5. Juli 2012 17:04

Probleme mit QTextStream

Beitrag von Killur »

Hallo,
ich versuche den Inhalt einer Datei einzulesen, klappt eigentlich auch ganz gut, bis jetzt sieht mein code so aus:

Code: Alles auswählen

QFile f(fileName.toStdString().c_str());
    f.open(QIODevice::ReadOnly);


    QTextStream in(&f);
    QString line;
    this->lineCount = 0;


    QMessageBox msgBox;

    msgBox.addButton(QMessageBox::Yes);
    msgBox.addButton(QMessageBox::No);

 


    while(!in.atEnd())
    {
        in >> line;
        this->lineCount++;
    }


    QString c= QString::number(this->lineCount);
    msgBox.setText(c.toStdString().c_str());
    msgBox.exec();
Es gibt manchmal(nicht immer!) Verfälschungen von lineCount.
Ich habe z.b. eine Datei mit dem Inhalt:
1
2
3
4
5
6
7
8
9

Da bekomme ich 9 angezeigt. Jetzt habe ich aber eine Datei mit dem Inhalt:
1: 12

Und da bekomme ich 2 angezeigt, obwohl es nur eine Zeile ist. Es ist auch keine leere Zeile untendrunter...

Hoffentlich weis jemand weiter :)
Grüße!
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: Probleme mit QTextStream

Beitrag von Christian81 »

Erstmal - woher hast Du diesen Code:

Code: Alles auswählen

QFile f(fileName.toStdString().c_str());
Wer kommt auf solche Ideen? Wenn fileName schon ein QString ist - was soll das ganze (abgesehen davon dass es nur mit ASCII-Zeichen korrekt funktioniert). Das Gleiche gilt für QMessageBox::setText()
Zum anderen - solange ich die Datei nicht gesehen habe die angeblich nur eine Zeile hat, glaube ich es nicht.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Killur
Beiträge: 10
Registriert: 5. Juli 2012 17:04

Re: Probleme mit QTextStream

Beitrag von Killur »

Ok ich habe jetzt

Code: Alles auswählen

QFile f(fileName);
daraus gemacht (habe überall das .toStdString.c_str() entfernt). Wie soll ich dir die Datei denn zeigen?! Ich habe dir den Inhalt doch schon gesagt..
Und es funktioniert immernoch nicht.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: Probleme mit QTextStream

Beitrag von Christian81 »

Wenn am Ende noch eine Leerzeile ist dann kann ich das dann sehen.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Killur
Beiträge: 10
Registriert: 5. Juli 2012 17:04

Re: Probleme mit QTextStream

Beitrag von Killur »

Ich habe Notepad++, damit werden rechts am Rand die Zeilen angezeigt. Soll ich noch ein Bild hochladen??
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: Probleme mit QTextStream

Beitrag von Christian81 »

Ist es so schwer ein minimales, kompilierbares Beispiel und die betreffende Textdatei hochzuladen? Wenn ja dann kann ich Dir leider nicht helfen. 20 Zeilen Code und eine Datei mit ein paar Zeichen... :roll:
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Killur
Beiträge: 10
Registriert: 5. Juli 2012 17:04

Re: Probleme mit QTextStream

Beitrag von Killur »

http://www.file-upload.net/download-452 ... i.zip.html

Eine .rar Datei mit der bennanten txt Datei und dem Programm. Du must auf Seite 1 auf "Browse" klicken, die Datei auswählen und du bekommst die Anzahl der Reihen angezeigt.
brax
Beiträge: 208
Registriert: 11. Mai 2010 11:22

Re: Probleme mit QTextStream

Beitrag von brax »

Ich sage mal die Antwort vorher, die Du (zu Recht) bekommen wirst:
Eine executable ist kein minimales, kompilierbares Beispiel.
Würdest Du einfach so eine Executable ausführen, die Dir irgendwer in einem Forum hochgeladen hat? Wenn die antwort "ja" lautet, solltest Du das mal überdenken... Von den armen Foristen, die kein Windows benutzen mal ganz abgesehen...

P.S.: Dein Problem ist, dass QTextStream beim ">>" Operator nicht Zeilen liest, sondern Wörter:
QTextStream & QTextStream::operator>> ( QString & str )
Reads a word from the stream and stores it in str, then returns a reference to the stream. Words are separated by whitespace (i.e., all characters for which QChar::isSpace() returns true).
Killur
Beiträge: 10
Registriert: 5. Juli 2012 17:04

Re: Probleme mit QTextStream

Beitrag von Killur »

Okay, und was sollte ich anstatt dem Operator >> benutzen? Sowas wie getline habe ich bei QTextStream nicht gefunden..
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: Probleme mit QTextStream

Beitrag von franzf »

Das heißt readLine.
Aber nachdem du eh nichts mit dem String anfangen willst, nimm doch std::ifstream und wurschtel dich in ner Schleife mit f.ignore() durch:

Code: Alles auswählen

#include <fstream>
#include <iostream>
#include <limits>
#include <cstddef>

int main() {
    std::ifstream f("test.dat");
    std::size_t lines=0;
    while(f.ignore(std::numeric_limits<std::streamsize>::max(), '\n')) {
        ++lines;
    }
    std::cout << lines << '\n';
}
// edit:
Fehler im Code behoben: hat immer eine Zeile zu viel gezählt, da vor dem letzten ignore() der stream schon in der letzten Zeile (aber noch ok) war, und dadurch fälschlicherweise nochmal hochgezählt wurde.
Der alte (fehlerhafte) Codeabschnitt:

Code: Alles auswählen

while(f) {
    ++lines;
    f.ignore(std::numeric_limits<std::streamsize>::max(), '\n);
}
Antworten