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