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

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转换成QStringQString 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.mrgr.cn/news/39639.html

相关文章:

  • STM32 OLED
  • Web3D技术应用的场景有哪些?有何优势?
  • APISIX 联动雷池 WAF 实现 Web 安全防护
  • 《Xilinx FPGA权威设计指南》:一本全面的Vivado设计手册
  • 华为/海思 Hi3516CV610 4K@20,6M@30 分辨率,1T 算力 NPU
  • 显示器放大后,大漠识图识色坐标偏移解决方法
  • Python 解包详解:高效简化代码的实用方法
  • 【PRISMA卫星有关简介】
  • 0基础学前端 day8 -- HTML表单
  • 数学期望专题
  • Java对象访问机制:句柄访问与直接指针访问
  • MySQL基础篇 - 约束
  • 基于 Visual Studio C# 的 Hypack 测量成果 RAW 原始数据解算
  • 【ADC】使用全差分放大器驱动 SAR 型 ADC 时的输入输出范围
  • 探索PyUSB:Python与USB设备的桥梁
  • 64.【C语言】再议结构体(下)
  • 编程题 7-13 日K蜡烛图【PAT】
  • Hadoop搭建及Springboot集成
  • Redis缓存穿透解决方案之一:布隆过滤器与计数型布隆过滤器概述以及两者在Spring中的使用
  • 道可云人工智能元宇宙每日资讯|首届天府人工智能大会在成都举办