在QT中读取文本文件中的数据

时间:2015-11-10 02:18:58

标签: c++ qt file

我必须从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])));

 }`

我尝试了很多方法,但没有任何方法可以帮助我

2 个答案:

答案 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]);
    }
}
相关问题