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

发布时间:2024年01月10日

以下接口包括按时间生成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;
}

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

文章来源:https://blog.csdn.net/xy_77777/article/details/135505189
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。