Qt读取文本文件与QTextStream
Qt reading textfile with 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++;
}
}
现在,信息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。
在编写文件读取代码时,最好的方法是在测试代码时打印所读取的内容。让我知道它是否适合你。
桑托斯相关文章:
- .cpp和.h文件中的模板专用化声明
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 文本文件中的单词链表
- CMake-按正确顺序将项目与C运行时对象文件链接
- 使用新行和不使用新行读取文件
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 挂起和取消挂起一个文件DLL
- 如何确定我已使用非编码文件到达 EOF?
- 命名空间中具有.h和.cpp文件的类
- 如何使用ndk-build.cmd构建Android.so文件
- 从包含m行的文件中提取n行,必要时(惰性地)重复该文件
- 读取文件并输入到矢量中
- 在C++中查找文件
- c++库的公共头文件中应该包含什么
- qfile qtextStream仅读取文件的一部分
- QTextStream 无法使用开放模式写入文件,包括"t" QIODevice::Append
- QTextStream 将 csv 文件中每行的第一个字符与已知变量进行比较
- QFile / QTextStream在删除正在写入的文件时不显示错误
- 使用QTextStream读取正在写入的文件
- Qt读取文本文件与QTextStream