当前位置: 首页 > article >正文

32、Qt读写csv文件

一、写入

    QString fileName = QFileDialog::getSaveFileName(this, "写入", "/untitled.csv", tr("Files (*.csv)"));
    if(fileName.isEmpty())
    {
        QMessageBox::warning(this, "提示", "文件名不能为空", QMessageBox::Ok);
        return;
    }

    QFile file(fileName);
    bool ret = file.open(QIODevice::WriteOnly);
    if(!ret)
    {
        QMessageBox::warning(this, "提示", QString("打开文件失败: %1").arg(file.errorString()), QMessageBox::Ok);
        return;
    }
    QString conTents;
    //表头
    conTents += "姓名";
    conTents += ",";
    conTents += "年龄";
    conTents += ",";
    conTents += "时间";
    conTents += "\n";

    conTents += "张三";
    conTents += ",";
    conTents += "23";
    conTents += ",";
    QString time = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss.zzz").replace(" ", "-"); //有空格会导致年月日被省略
    conTents += time;
    conTents += "\n";

    conTents += "李四";
    conTents += ",";
    conTents += "24";
    conTents += ",";
    time = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss.zzz").replace(" ", "-"); //有空格会导致年月日被省略
    conTents += time;
    conTents += "\n";

    conTents += "王五";
    conTents += ",";
    conTents += "25";
    conTents += ",";
    time = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss.zzz").replace(" ", "-"); //有空格会导致年月日被省略
    conTents += time;
    conTents += "\n";

    QByteArray baSave = QString(conTents).toLocal8Bit(); //格式转换
    file.write(baSave.data());
    file.close();

写入好的文件内容如下:

二、读取

void MainWindow::on_readPushButton_clicked()
{
    QString fileName = QFileDialog::getOpenFileName(this, "读取", "", tr("File (*.csv)"));
    QFile file(fileName);
    if(file.open(QIODevice::ReadOnly)) //只读方式打开文件
    {
        while(!file.atEnd())
        {
            QString strLine = GetCorrectUnicode(file.readLine()); //格式转换
            strLine.remove("\n"); //去掉结尾换行符号
            QStringList strLineList = strLine.split(",");
            if(strLineList.size() > 1)
            {
                qDebug() << strLineList.at(0) << strLineList.at(1) << strLineList.at(2);
            }
        }
        file.close();
    }
}

QString MainWindow::GetCorrectUnicode(const QByteArray &ba)
{
    // state用于保存转换状态,它的成员invalidChars,可用来判断是否转换成功
    // 如果转换成功,则值为0,如果值大于0,则说明转换失败
    QTextCodec::ConverterState state;
    // 先尝试使用utf-8的方式把QByteArray转换成QString
    QString text = QTextCodec::codecForName("UTF-8")->toUnicode(ba.constData(), ba.size(), &state);
    // 如果转换时无效字符数量大于0,说明编码格式不对
    if (state.invalidChars > 0)
    {
        // 再尝试使用GBK的方式进行转换,一般就能转换正确(当然也可能是其它格式,但比较少见了)
        text = QTextCodec::codecForName("GBK")->toUnicode(ba);
    }
    return text;
}

读取的内容如下:


http://www.kler.cn/news/329429.html

相关文章:

  • 压力测试指南-压力测试基础入门
  • HashMap为什么线程不安全?如何实现线程安全
  • Ubuntu20.04 安装汉语拼音后重启登入黑屏
  • wireshark抓包工具
  • FFmpeg开发笔记(五十八)把32位采样的MP3转换为16位的PCM音频
  • C#里使用protobuf的简单的例子
  • centos7-zabbix安装与使用(较全的配置)
  • 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-09-30
  • Excel实现省-市-区/县级联
  • 八大排序详解
  • 【Java 类与对象】多态
  • 【微服务】组件、基础工程构建(day2)
  • MQ基础:RabbitMQ真面目
  • 学习记录:js算法(四十九):二叉树的层序遍历
  • 【AI大模型】深入Transformer架构:编码器部分的实现与解析(上)
  • JavaScript爬虫:数据抓取的艺术与实践
  • 【北京迅为】《STM32MP157开发板嵌入式开发指南》- 第十三章 Linux连接档概念
  • 数学建模运筹优化——规划问题Python版(线性、非线性、整数、0/1)
  • 中九无科研无竞赛保研经验帖——上交软院、中科大计算机、复旦工程硕、南大工程硕、浙大软件
  • 【MySQL】逐一更新数据(字段唯一)-存储过程
  • 《安富莱嵌入式周报》第343期:雷电USB4开源示波器正式发布,卓越的模拟前端低噪便携示波器,自带100W电源的便携智能烙铁,NASA航空航天锂电池设计
  • 西电25考研 VS 24考研专业课大纲变动汇总
  • Oracle EBS中 预算编制与计划 模块的财务流程概览
  • golang web笔记-2.请求request
  • 大表性能优化的关键技术
  • 【Vue】从后端返回数据如何保留文本的格式,包括换行
  • 数据库查询
  • 注册安全分析报告:科研诚信查询平台无验证方式导致安全隐患
  • buuctf [ACTF2020 新生赛]Include
  • 面试题05.08绘制直线问题详解(考察点为位运算符)