我必须从QT中的文本文件中读取数据,其中包含此格式的数据
1 1
2 4
3 9
4 16
5 25
我想取每个整数或浮点数并将其分配给数组变量,如
X[0]=1, Y[0]=1 &
X[1]=2, Y[1]=4 and so on....
enter code here
QString filename=QFileDialog::getOpenFileName(this, tr("Open File"), "media://", "All files (*.*);; Text File (*.txt)");
QFile file3(filename);
if(!file3.open(QFile::ReadOnly|QFile::Text))
QMessageBox::information(0,"info", file3.errorString());
QTextStream in3(&file3);
QString xv,*p,xx,yy;
QStringList L;
for(j=0;j<n;j++)
{
xv = in3.readLine();
p[0]=xv;
p[1]=xv;
xx=p[0];
yy=p[1];
L=xx.split(" ");
L=yy.split(" ");
X[j]=L[0].toFloat();
ui->xvalue->addItem(QString::number((X[j])));
xv.split(" ", QString::SkipEmptyParts);
Y[j]=L[1].toFloat();
ui->yvalue->addItem(QString::number((Y[j])));
}`
我尝试了很多方法,但没有任何方法可以帮助我
答案 0 :(得分:2)
最简单的方法是使用QTextStream
#include <QFile>
#include <QTextStream>
QFile f("your.file");
f.open(QIODevice::ReadOnly);
QTextStream s(&f);
while ( !s.atEnd() ) {
double d;
s >> d;
// append d to some list;
}
答案 1 :(得分:0)
if(!file3.open(QFile::ReadOnly|QFile::Text)){
QMessageBox::information(0,"info", file3.errorString());
那很糟糕,你需要处理错误而不是消息框,或者在else语句中附上其他错误。
*p
为什么其中一个字符串是指针?
for(j=0;j<n;j++)
你还没有宣布n ..这甚至可以编译吗?
X[j]=L[0].toFloat();
为什么要通过j迭代器递增数组?您将立即收到内存错误,因为您的每行只有一个拆分,每行有2个浮点数,因此永远不会超过[1]。你真的只需要访问[0]和[1]
通常,您需要使用容器和内存安全代码,而不是原始数组。另外,我可能会迷失在你有趣的变量命名中,但为什么要将它转换为浮点数,然后将其转换回QString?只需将其直接插入您的ui元素即可。
while (!file.atEnd()) {
QString line = in.readLine();
QStringList list = line.split(" ");
ui->xvalue->addItem(line[0]);
ui->xvalue->addItem(line[1]);
}
}