Qt读取文本文件与QTextStream

Qt reading textfile with QTextStream

本文关键字:QTextStream 文件 取文本 读取 Qt      更新时间:2023-10-16

我有麻烦阅读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++;
            }

}

现在,信息1-4读取正确。但是在lineinfo1-3和data1-3 (linepart[0]等)被nan或0填充之后?!

有人能帮帮我吗?

谢谢!

这是我的解决方案:

只要将代码修改为,我猜应该可以工作:

 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。

在编写文件读取代码时,最好的方法是在测试代码时打印所读取的内容。让我知道它是否适合你。

桑托斯