Программа Qt для чтения текста видит только одну строку в многострочном файле
Я написал программу для чтения последовательности целочисленных баллов по одному на строку в текстовом файле. Файл имеет заголовок, который необходимо пропустить. Несмотря на то, что она смотрит на эту программу, она видит только первую строку (заголовок), а затем ведет себя так, как будто она в конце.
#include <QCoreApplication>
#include <QString>
#include <QTextStream>
#include <QDebug>
#include <QFile>
bool readScores(QString path)
{
int line_count = 0;
QFile qFile(path);
if(!qFile.exists())
{
qDebug()<<"path does not exist:" << path;
return false;
}
if(!qFile.open(QIODevice::ReadOnly|QIODevice::Text)){
qDebug("open fails");
return false;
}
QTextStream ts(&qFile);
qDebug()<<ts.readLine();// just read the head...
while(!qFile.atEnd())
{
line_count++;
int score;
QTextStream tsLine;
QString line = ts.readLine(512);
tsLine.setString(&line);
tsLine >> score;
qDebug()<<"Just read"<<score;
}
qDebug()<<"found "<<line_count<<" lines";
qFile.close();
return true;
}
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
readScores("e:/tmp/scores.txt");
return a.exec();
}
А вот и содержание Scores.txt:
just test data
69
48
38
2
5
1
1
4
Вот вывод программы
"just test data"
found 0 lines
Вы понимаете, почему программа не видит 8 строчек партитуры? Я использую Qt 5.3.1 на Windows с Mingw32
1 ответ
Когда вы используете QTextStream, вы больше не должны использовать QFile:
bool readScores(QString path)
{
[...]
QTextStream ts(&qFile);
qDebug()<<ts.readLine();// just read the head...
QString line;
do
{
line = ts.readLine();
bool ok;
int score = line.toInt(&ok);
if(ok){
qDebug()<<"Just read"<<score;
line_count++;
}
}
while (!line.isNull());
qDebug()<<"found "<<line_count<<" lines";
qFile.close();
return true;
}