QT项目生成CSV文件保存数据

以下接口包括按时间生成CSV总表和每次测试根据SN和时间区分的子文件夹(包括子CSV和子图片存放地址)
接口定义

///CSV文件保存
    // //测试数据总表
    //添加数据,用";"分隔开
    bool TotalCSVDataAdd(QString data);
    //测试完毕,跳转到下一行
    bool TotalCSVDataOneTimeEnd();
    // 
    // 
    //子表文件夹中
    //每个对应产品的文件夹下可以放测试的图片
    //根据新建文件夹
    //新建CSV表格,返回文件夹名字(也是子CSV名字)
    //调用示例:QString name = NewCSVFile();
    QString NewCSVFile(QString sn = "sn");
    //每一个测试项调用一次,其中会解析QString data 写入到每一个测试项中(每次测试完加入数据)
    //解析时会按";"分隔开,写入到CSV文件中去
    //调用示例:bool status2 = SaveCSVData(name, "777;888;zxcv;");
    bool SaveCSVData(QString File, QString data);

    //获取每个产品图片存储位置
    QString SNDutSavePic(QString file, QString picname);


bool PhaseBase::TotalCSVDataAdd(QString data)
{
    //2.文件名采用系统时间戳生成唯一的文件
    QDateTime current_date_time = QDateTime::currentDateTime();
    QString current_date = current_date_time.toString("yyyy_MM_dd");
    QString csvFile;//CSV名

    // 先检查有没有文件夹存在,没有就让程序创建文件夹先
    QDir dirCSV;
    QString strDir = QString("D://DUTData_CSV");

    if (!dirCSV.exists(strDir))
        dirCSV.mkpath(strDir);

    //csvFile += tr("/%3_TestData_%4.csv").arg(sn).arg(current_date).arg(sn).arg(current_date);
    csvFile = strDir + tr("/%1_TestData.csv").arg(current_date);

    //3.用QFile打开.csv文件 如果不存在则会自动新建一个新的文件
    QFile file(csvFile);
    if (file.exists())
    {
        //如果文件存在执行的操作,此处为空,因为文件不可能存在
    }
    file.open(QIODevice::Append | QIODevice::Text);
    QTextStream out(&file);

    //4.获取数据 创建第一行

    QString csvdata1 = data.replace(";", ",");
    QString csvdata2 = data.replace("+", ",");       //外部测试模式 修改+号存储

    out << data;//表头

    //5.写完数据需要关闭文件
    file.close();

    return true;
}

bool PhaseBase::TotalCSVDataOneTimeEnd()
{
    TotalCSVDataAdd("\n");
    return true;
}



/// <summary>
/// 子表
/// </summary>
/// <param name="sn"></param>
/// <returns></returns>
QString PhaseBase::NewCSVFile(QString sn)
{
    //2.文件名采用系统时间戳生成唯一的文件
    QDateTime current_date_time = QDateTime::currentDateTime();
    QString current_date = current_date_time.toString("yyyy_MM_dd_hh_mm_ss");
    QString csvFile;//CSV名

    // 先检查有没有文件夹存在,没有就让程序创建文件夹先
    QDir dirCSV;
    QString strDir = QString("D://DUTData_CSV//%1_%2").arg(sn).arg(current_date);

    if (!dirCSV.exists(strDir))
        dirCSV.mkpath(strDir);

    //csvFile += tr("/%3_TestData_%4.csv").arg(sn).arg(current_date).arg(sn).arg(current_date);
    csvFile = strDir + tr("/%1_%2.csv").arg(sn).arg(current_date);

    //3.用QFile打开.csv文件 如果不存在则会自动新建一个新的文件
    QFile file(csvFile);
    if (file.exists())
    {
        //如果文件存在执行的操作,此处为空,因为文件不可能存在
    }
    file.open(QIODevice::ReadWrite | QIODevice::Text);
    QTextStream out(&file);

    //4.获取数据 创建第一行
    //out << tr("UID,") << tr("sysID,") << tr("UsrID,") << tr("MeterNum,") << tr("CMD,\n");//表头

    qDebug() << "NewCSVFile:csvFile:" << csvFile;

    //返回文件夹名(CSV名字相同)
    return sn + "_" + current_date;
}

bool PhaseBase::SaveCSVData(QString File, QString data)
{
    QString csvFile = "D://DUTData_CSV//" + File + "/" + File + ".csv";
    //3.用QFile打开.csv文件 如果不存在则会自动新建一个新的文件
    QFile file(csvFile);
    if (file.exists())
    {
        //如果文件存在执行的操作,此处为空,因为文件不可能存在
    }
    //file.open(QIODevice::ReadWrite | QIODevice::Text);
    file.open(QIODevice::Append | QIODevice::Text);

    QTextStream out(&file);

    //4.获取数据 创建第一行
    //out << data<<",";//CSV中用","分隔开数据,
    //存入CSV中 用","替代";"
    QString csvdata1 = data.replace(";", ",");
    QString csvdata2 = data.replace("+", ",");//外部测试模式 修改+号存储

    out << data << "\n";//一行结束,换行

    //5.写完数据需要关闭文件
    file.close();

    return true;
}

QString PhaseBase::SNDutSavePic(QString file, QString picname)
{

    QString picFile = "D://DUTData_CSV//" + file + "/" + picname;
    qDebug() << "SNDutSavePic:" << picFile;
    return picFile;
}

使用:

{
	CSVFileName = NewCSVFile();
    qDebug() << "NewCSVFile();" << CSVFileName;
}


{
	//存储到总CSV中
    QString Test1Num = "12345;78910;";
    QString Test1Result = "OK";
    QString Test2Num = "12345;78910;";
    QString Test2Result = "NG";
    TotalCSVDataAdd("Test1;" + Test1Num + ";" + Test1Result + ";");    //总CSV文件
    TotalCSVDataAdd("Test2;" + Test2Num + ";" + Test2Result + ";");
    TotalCSVDataOneTimeEnd();       //一个SN结束,进入下一行

	//存储到到子CSV中
    SaveCSVData(CSVFileName, "Test1;" + Test1Num + ";" + Test1Result + ";");
    SaveCSVData(CSVFileName, "Test2;" + Test2Num + ";" + Test2Result + ";");

    QString Savepicpath = SNDutSavePic(CSVFileName, "NearPic.jpg");     //此Savepicpath就是图片地址
    qDebug() << "Savepicpath:" << Savepicpath;
}

生成结果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/307769.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

小redbook.item_get_video API在电商中的市场潜力与前景

小redbook.item_get_video API在电商中的市场潜力与前景 随着互联网的快速发展和普及&#xff0c;电商行业经历了翻天覆地的变化。在这个过程中&#xff0c;数据成为了电商企业竞争的核心资源。小redbook.item_get_video API作为小红书平台提供的一种数据接口服务&#xff0c;…

Shell 正则表达式及综合案例及文本处理工具

目录 一、常规匹配 二、常用特殊字符 三、匹配手机号 四、案例之归档文件 五、案例之定时归档文件 六、Shell文本处理工具 1. cut工具 2. awk工具 一、常规匹配 一串不包含特殊字符的正则表达式匹配它自己 例子&#xff0c;比如说想要查看密码包含root字符串的&#x…

DNS解析原理和k8s DNS 实践

1. 问题背景 1.1 域名解析异常 近期开发的一个功能&#xff0c;需要在k8s集群容器环境中调用公司内部api&#xff0c;api提供了内网域名&#xff0c;解析内网域名异常导致请求超时&#xff0c;因此梳理了下DNS的知识点。 可以先看到下面&#x1f447;这段配置&#xff0c;修…

.NetCore部署微服务(二)

目录 前言 概念 一 Consul注册服务中心 1.1 consul下载 1.2 consul运行 二 服务注册 2.1 安装Consul包 2.2 修改配置文件 2.3 注入Consul服务 2.3 修改Controller&#xff0c;增加HealthCheck方法 三 运行服务 3.1 docker运行服务 前言 上一篇讲到微服务要灵活伸缩…

WPS Office找回丢失的工作文件

WPS office恢复办公文件方法有两种. 1.通过备份中心可以查看近期编辑 office 历史版本进行恢复. 2.缓存备份目录可以查看编辑过的 office 文件的历史版本&#xff0c;新版本 WPS 可以在配置工具-备份清理找到&#xff0c;2019 年旧版本 WPS 可以在新建任意 office 文件-文件-选…

云上攻防--云原生Docker逃逸--特权逃逸--危险挂载--漏洞逃逸

云上攻防–云原生&&Docker逃逸–特权逃逸–危险挂载–漏洞逃逸 目录标题 云上攻防--云原生&&Docker逃逸--特权逃逸--危险挂载--漏洞逃逸Docker介绍判断Docker环境容器逃逸-特权模式容器逃逸-危险挂载挂载DockerSocket逃逸挂载宿主机procfs逃逸 容器逃逸-Docker…

年轻人2023消费图鉴,媒介盒子为你揭秘

回顾近一年的消费&#xff0c;发现大家差不多都是“扣扣嗖嗖的花了很多钱”&#xff0c;如果总结2023年的大众消费关键词&#xff0c;那一定是更加“理性”&#xff0c;据艾瑞咨询《2023年中国消费者洞察白皮书》显示&#xff0c;“精细化”成为2023年的消费关键词&#xff0c;…

数字战场上的坚固屏障:雷池社区版(WAF)

黑客的挑战 智能语义分析算法&#xff1a; 黑客们常利用复杂技术进行攻击&#xff0c;但雷池社区版的智能语义分析算法能深入解析攻击本质&#xff0c;即使是最复杂的攻击手法也难以逃脱。 0day攻击防御&#xff1a; 传统防火墙难以防御未知攻击&#xff0c;但雷池社区版能有效…

树莓派非常实用的程序-2 vcgencmd

vcgencmd 工具用于从Raspberry Pi上的VideoCore GPU输出信息。您可以在 https://github.com/raspberrypi/userland/tree/master/host_applications/linux/apps/gencmd[Github].上找到 vcgencmd 实用程序的源代码。要获取支持的所有 vcgencmd 命令的列表&#xff0c;请使用 vcge…

windows系统下postgresql数据库迁移

1、先停掉postgresql服务。任务管理器中找到postgresql服务&#xff0c;选中右键停止。 2、复制C:\zprogram\路径下的pgsql文件夹到E:\zprogram\路径下。 就是把pgsql文件夹从C盘zprogram文件夹挪到E盘zprogram文件夹中。 3、windowsR键&#xff0c;输入regedit&#xff0c;打…

《软件方法》强化自测题-分析(7)

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 按照业务建模、需求、分析、设计工作流考察&#xff0c;答案不直接给出&#xff0c;可访问自测链接或扫二维码自测&#xff0c;做到全对才能知道答案。 知识点见《软件方法》&#x…

Linux 常用指令汇总

Linux 常用指令汇总 文章目录 Linux 常用指令汇总[toc]前言一、文件目录指令pwd 指令ls 指令cd 指令mkdir 指令rmdir 指令tree 指令cp 指令rm 指令mv 指令cat 指令more 指令less 指令head 指令tail 指令echo 指令> 指令>> 指令 二、时间日期指令date 指令cal 指令 三、…

PayPal账号被关联!跨境卖家如何自救?关于PayPal防关联你不得不知道的事!

很多跨境卖家的支付平台都会选择 PayPal&#xff0c;但是 PayPal 账号在使用过程中也经常会遇见关联&#xff0c;风控等问题&#xff0c;这时候为了保护我们的 PayPal 账号安全&#xff0c;防关联就很重要。今天龙哥就分享一些关于 PayPal 防关联的内容&#xff0c;希望能够帮助…

windows安装运行Apache James(基于guide的版本)

下载地址 下载列表 https://james.apache.org/download.cgi 直接下载基于guide版本 https://www.apache.org/dyn/closer.lua/james/server/3.8.0/james-server-jpa-guice.zip 设置签名 解压&#xff0c;并切换到james-server-jpa-guice目录下&#xff0c;在powershellli执行…

【工具使用】VS Code设置字宽垂直标尺

一&#xff0c;简介 在编写代码时&#xff0c;每行写的代码过长&#xff0c;会导致查看代码不方便。所以如果能够有一条线提示宽度就好了&#xff0c;如下图所示&#xff1a; 本文就介绍如何在VS Code中添加这条提示线&#xff0c;供参考。 二&#xff0c;具体方法 settin…

Flink standalone集群部署配置

文章目录 简介软件依赖部署方案二、安装1.下载并解压2.ssh免密登录3.修改配置文件3.启动集群4.访问 Web UI 简介 Flink独立模式&#xff08;Standalone&#xff09;是部署 Flink 最基本也是最简单的方式&#xff1a;所需要的所有 Flink 组件&#xff0c; 都只是操作系统上运行…

docker搭建部署mysql并挂载指定目录

Docker是一种轻量级、可移植的容器化平台&#xff0c;可以简化应用程序的部署和管理。在本文中&#xff0c;我们将探讨如何使用Docker来搭建和部署MySQL数据库&#xff0c;并将数据和配置文件挂载到外部目录&#xff0c;以实现数据持久化和方便的配置管理。 1: 安装Docker 首…

docker+jmeter实现windows作为主控机,linux作为负载机的分布式压测环境搭建

dockerjmeter实现windows作为主控机&#xff0c;linux作为负载机的分布式压测环境搭建 1、搭建环境说明2、windows主控机安装Jmeter3、linux负载机安装Jmeter3.1、安装docker环境3.2、使用docker安装jmeter 4、windows主控机分发测试任务 1、搭建环境说明 准备一台windows主机…

element input组件自动失去焦点问题解决

最近在 Vue3 ElementPlus 中&#xff0c;使用 el-input 组件时&#xff0c;如果设置了 v-model&#xff0c;那么在每次改变内容后后&#xff0c;input 会自动失去焦点&#xff0c;这样会导致用户无法输入多个字符。 一、问题原因 如上图所示&#xff0c;配置项的 Name 和 Cod…

Zookeeper设计理念与源码剖析

Zookeeper 架构理解 整体架构 Follower server 可以直接处理读请求&#xff0c;但不能直接处理写请求。写请求只能转发给 leader server 进行处理。最终所有的写请求在 leader server 端串行执行。&#xff08;因为分布式环境下永远无法精确地确认不同服务器不同事件发生的先后…