Qt进行CSV文件操作

**

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;
        }
    }

运行结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值