目錄
一、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