QT 讀寫CSV文件

目錄

一、CSV的結構

二、源碼簡析

三、源碼


一、CSV的結構

CSV文件,也稱爲逗號分隔值文件,顧名思義,就是用逗號和換行符分隔開的文件。下面舉個例子就很清楚了:

例如我有一個class.csv文件,如果用表格軟件打開,即如下:

如果用記事本打開,就是如下:

無論用什麼方式打開,其實就是同一個東西。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();
    }
}

寫入文件結果:

 

三、源碼

鏈接:https://pan.baidu.com/s/1ZyXN4xZYKfw2UlBqyfUx1w 
提取碼:7vwf 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章