**
Qt操作csv文件
**
csv文件简述
逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样被解读的数据。CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。
示例代码
头文件
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
private slots:
void onBtn();
void onOpenBtn();
private:
Ui::Widget *ui;
};
#endif // WIDGET_H
信号绑定
connect(ui->pushButton, &QPushButton::clicked, this, &Widget::onBtn);
connect(ui->pushButton_open, &QPushButton::clicked, this, &Widget::onOpenBtn);
此信号与槽函数的关联在构造函数中实现即可。
槽函数:onBtn
QString csvFileName = QFileDialog::getSaveFileName(this, QStringLiteral("保存文件设置"), ".", "csv files(*.csv)");
QFile file(csvFileName);
if(!file.exists())
{
file.open(QIODevice::WriteOnly);
QTextStream csvOutPut(&file);
QString str ="姓名,班级,年龄\n";
csvOutPut << str.toUtf8();
file.close();
}
if(!file.open(QIODevice::WriteOnly | QIODevice::Append))
{
qDebug() << "0000000000000000000000";
}
else
{
QTextStream csvOutPut(&file);
QString str1 = "张三,3年级1班,28\n";
QString str2 = "李四,3年级2班,36\n";
QString str3 = "王五,3年级2班,36\n";
csvOutPut << str1.toUtf8();
csvOutPut << str2.toUtf8();
csvOutPut << str3.toUtf8();
file.flush();
file.close();
}
运行结果:
槽函数:onOpenBtn
QString fileName = QFileDialog::getOpenFileName(this,QStringLiteral("打开文件"),".",tr("csv files(*.csv)"));
if(fileName == "")
{
return;
}
QFile file(fileName);
if(!file.open(QIODevice::ReadOnly))
{
qDebug()<<QStringLiteral("请正确选择csv文件");
}
else
{
QTextStream * read = new QTextStream(&file);
QStringList Data = read->readAll().split("\n"); //每行以\n区分
for(int i = 0 ; i < Data.count() - 1 ; i++) //去掉最后一行空白行
{
QStringList strLine = Data.at(i).split(","); //一行中的单元格以,区分
qDebug() << strLine;
}
}
运行结果: