• 6398阅读
  • 4回复

txt文件导入问题 [复制链接]

上一主题 下一主题
离线friday1203
 
只看楼主 倒序阅读 楼主  发表于: 2009-10-23
     刚学qt,c语言也学得不是太好,最近在用qt designer编一个界面,想请教一下关于数据导入的问题。我要将一个txt中的数据导入一个数组中,查了一下要用到QTextStream,QFile但是不熟啊,谁帮帮忙,写个例子给我看看。txt中有两列数据,部分数据如下(这里列出了其中的6行,共有3000行),要把第一列的数据导入数组a[3000],第二组的数据导入a[3000]中。
0.0000000e+000  1.8000000e-001
  5.0000000e-011  1.9600000e-001
  1.0000000e-010  1.8000000e-001
  1.5000000e-010  1.8800000e-001
  2.0000000e-010  1.8000000e-001
  2.5000000e-010  1.8800000e-001
离线jorneyr

只看该作者 1楼 发表于: 2009-10-24
数据文件为:data.txt:
0.0000000e+000  1.8000000e-001
5.0000000e-011  1.9600000e-001
1.0000000e-010  1.8000000e-001
1.5000000e-010  1.8800000e-001
2.0000000e-010  1.8000000e-001
2.5000000e-010  1.8800000e-001

读取数据并转换为double的程序为main.cpp:
#include <qDebug>
#include <QFile>
#include <QTextStream>

int main(int argc, char *argv[]) {
    QFile file("data.txt");
    if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { // 文件的打开方式
        qDebug() << "Open file error!";
        return -1;
    }

    QTextStream in(&file);
    double d;

    while (!in.atEnd()) {
        in >> d; // 从文件中读取一个double数
        qDebug() << d; // 输出到终端里, 以查看是否成功读取
    }

    file.close();

    return 0;
}

输出结果为:
0
0.18
5e-11
0.196
1e-10
0.18
1.5e-10
0.188
2e-10
0.18
2.5e-10
0.188

具体的把代码运用到你的业务逻辑里, 就要靠你自己了.
离线friday1203
只看该作者 2楼 发表于: 2009-10-25
那个debug怎么看啊,我看不到结果。我用的是windows vista,帮我看看吧:
project中包含以下文件:
main.cpp
mainwindow.h
mainwindow,cpp
mainwindow.ui
这是”mainwindow.h":
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include "ui_mainwindow.h"
#include <QtGui/QMainWindow>
class QFileDialog;
class QMessageBox;
class QString;

namespace Ui
{
    class MainWindow;
}

class MainWindow : public QMainWindow,public Ui_MainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = 0);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
    QFileDialog *filedialog;


    QString filename;




private slots:
    void on_pushButton_clicked();
     void choose();
    void load( const QString &fileName );
};




#endif // MAINWINDOW_H

这是"mainwindow.cpp":
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <qfiledialog.h>
#include <qfile.h>
#include <qtextstream.h>
#include <qmessagebox.h>
#include <qstring.h>
#include <qdebug.h>
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent), ui(new Ui::MainWindow)
{
    ui->setupUi(this);

}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_pushButton_clicked()
{
    choose();
}
    void MainWindow::choose()
{
    QString fn = QFileDialog::getOpenFileName(this, QString::null, QString::null,QString::null
                                               );
    if ( !fn.isEmpty() )
        load( fn );


}


void MainWindow::load( const QString &fileName )
{

    QFile file(filename);
    if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { // 文件的打开方式
        qDebug() << "Open file error!";
    }

    QTextStream in(&file);
    double d;

    while (!in.atEnd()) {
        in >> d; // 从文件中读取一个double数
        qDebug() << d; // 输出到终端里, 以查看是否成功读取
    }

    file.close();
}
按你的方式改了源文件,打开后发现不能找到txt。还有,我只要吧txt其中的一列存到一个数组,另一列存到另一个数组
离线yangfanxing
只看该作者 3楼 发表于: 2009-10-26
qDbug()请参照我的空间http://hi.baidu.com/yangfanxing%5F%5F/blog/item/00d75282186a3c9af703a653.html

文件读入的话可以选择按行读入的形式,然后寻找行中空格,把每行拆分成两部分;每一行类似操作就可以实现LZ的想法了。。。

再具体的我不说了,请LZ自己上网多查查(好多这样的资料),不能一味地等论坛的人来答复。。。
PHPWind好恶心。。。不想看这种界面。。。
离线friday1203
只看该作者 4楼 发表于: 2009-10-26
好的,谢谢你。见笑了,编程刚开始,不怎么会。平常上课时间多,所以对于组长给的任务靠课余时间做了。没人询问,碰到小问题就不会了,真是不好意思。谢谢你!
快速回复
限100 字节
 
上一个 下一个