Qt читает текстовый файл с помощью QTextStream

У меня проблемы с чтением текстового файла с помощью Qt.
Мой текстовый файл выглядит так:

17,9001500000000    31,1151700000000    450 0   NaN NaN NaN NaN NaN NaN
1   1   1390309311,00000    0,999847695156391   0,999847695156391   0,999847695156391   0,999847695156391   0,999847695156391   0,999847695156391   0,999847695156391
1   2   1390309311,00000    0,999695413509548   0,999695413509548   0,999695413509548   0,999695413509548   0,999695413509548   0,999695413509548   0,999695413509548

и так далее..

Данные разделены пробелом

Первая строка: первые столбцы первой строки написаны с информацией, которая мне нужна для следующих строк. Не каждый столбец в первом ряду используется. После небольшого количества информации столбцы заполнены «NaN».

Следующие строки:
Здесь мои данные размещаются. Я хочу прочитать все это построчно. Первые 3 столбца снова являются общей информацией для строки, следующие (скажем, 300 столбцов) заполняются 3 различными типами данных (каждый тип размером 100 измерений).

Итак, я прочитал мой файл:
Во-первых, если я читаю в первой строке, я хочу получить общую информацию для всего файла. (info1, info2, info3, info4)
Затем я прочитал следующие строки, разделенные пробелом.

if (!File.open(QIODevice::ReadOnly | QIODevice::Text))
return false;

QTextStream in(&metFile);
QString line;
int linecount = 0;

double info1,info2,info3,info4;
double lineinfo1,lineinfo2,lineinfo3;

while (!in.atEnd()) {

if (linecount==0) {

in >> info1 >>  info2 >>  info3 >> info4;
linecount++;

}
else {

line = in.readLine();

QStringList lineparts = line.split(QRegExp("\\s+"));

lineinfo1=lineparts[0].toFloat;
lineinfo2=lineparts[1].toFloat;
lineinfo3=lineparts[2].toFloat;

for (int count=1; count<=100;count++) {

float data1=lineparts[count+2].toFloat();
float data2=lineparts[100+count+2].toFloat();
float data3=lineparts[2*100+count+2].toFloat();

}

linecount++;

}

}

Теперь info1-4 читаются правильно. Но после этого lineinfo1-3 и data1-3 (lineparts [0] и т. Д.) Заполняются nan или 0 ?!

Кто-нибудь может мне помочь?

Спасибо!

-1

Решение

Вот мое решение, чтобы попробовать:

Просто измените код, и я думаю, что это должно работать:

 if (linecount==0) {

in >> info1 >>  info2 >>  info3 >> info4;
QString  remaining_line = in.readLine();  //This should pass from NaN's to next line inside your else
linecount++;

}

Я предполагаю, что в вашем коде после чтения первых четырех чисел элемент управления все еще находится на первой строке, а внутри «else», когда вы читаете строку, он читает оставшуюся строку, где есть только NaN.

Лучший способ при написании кодов для чтения файлов — всегда печатать то, что вы читаете, при тестировании своего кода. Дайте мне знать, если это работает для вас.

Сантош

0

Другие решения


По вопросам рекламы [email protected]