QT 读写CSV文件

目录

一、CSV的结构

二、源码简析

三、源码


一、CSV的结构

CSV文件,也称为逗号分隔值文件,顾名思义,就是用逗号和换行符分隔开的文件。下面举个例子就很清楚了:

例如我有一个class.csv文件,如果用表格软件打开,即如下:

QT 读写CSV文件_第1张图片

如果用记事本打开,就是如下:

QT 读写CSV文件_第2张图片

无论用什么方式打开,其实就是同一个东西。CSV文件通过","分开列,通过换行符(\t\n)分开行,这就是CSV文件的结构。

所以解析的时候,也是根据CSV文件的结构解析:

①根据换行符号将数据分割为行数据集;
②根据逗号“,”将每一行的数据分割为列数据集;
③然后通过循环索引数据。

 

二、源码简析

①读取CSV文件

/*
头文件请自行加
*/

void MainWindow::on_pushButton_read_clicked()
{
    QString fileName = QFileDialog::getOpenFileName(this, tr("Excel file"), qApp->applicationDirPath (),
                                                       tr("Files (*.csv)"));
    QFile file(fileName);
    if(!file.open(QIODevice::ReadOnly | QIODevice::Text))
    {
        qDebug() << "Open Excel file failed!";
        return;
    }
    QStringList list;
    list.clear();
    QTextStream in(&file);
    in.setCodec("GB2312");      //这行的目的是支持读取中文信息
    //遍历行
    for(int i = 0; !in.atEnd(); i++)
    {
        QString fileLine = in.readLine();
        list = fileLine.split(",", QString::SkipEmptyParts);    //根据","开分隔开每行的列
        if(i > 0)   //这里的目的是第一行的表项不赋值,如果需要表项内容可以去掉if
        {
            //遍历列,我的Domo只有4列
            for(int j = 0; j <= 4; j++)
            {
                //list.at(j)就是每列的值
            }
            qDebug() << list;
        }
    }

    file.close();
}

调试输出:

②写文件

/*
头文件请自行加
*/

void MainWindow::on_pushButton_write_clicked()
{
    QString fileName = QFileDialog::getOpenFileName(this, tr("Excel file"), qApp->applicationDirPath (),
                                                       tr("Files (*.csv)"));
    QFile file(fileName);
    QStringList lines;
    lines << "class,name,age,score,teacher\n" << "3,XiaoDong,12,97,Joy\n" << "4,XiaoYao,12,99,Martin\n";
    //以只写方式打开,完全重写数据
    if (file.open(QIODevice::WriteOnly))
    {
        for (int i = 0; i < lines.size(); i++)
        {
            file.write(lines[i].toStdString().c_str());/*写入每一行数据到文件*/
        }

        file.close();
    }
}

写入文件结果:

QT 读写CSV文件_第3张图片

 

三、源码

链接:https://pan.baidu.com/s/1ZyXN4xZYKfw2UlBqyfUx1w 
提取码:7vwf 

你可能感兴趣的:(QT类)