Qt中csv文件的导入与导出

这篇博客介绍了CSV文件的基本概念、规则,并通过一个Qt应用实例展示了如何将控件信息导出到CSV文件以及从CSV文件导入控件。在导出过程中,程序获取并写入姓名、年龄等数据,以及表格内容。而在导入时,程序读取CSV文件内容,填充到相应的输入框和表格控件中。
摘要由CSDN通过智能技术生成

CSV

1.简介:

  全称:Comma Separated Values。

  是“逗号分隔值”的英文缩写,通常是纯文本文件,一般用wordWPS或是记事本打开。

2.规则:

(1)开头不留空,以行为单位。

(2)可含或不含列名,含列名则居文件第一行。

(3)一行数据部跨行,无空行。

(4)以半角逗号作分隔符,列为空也要表达其存在。

(5)列内容如存在半角逗号(即,)则用半角引号(即"")将该字段值包含起来。内容如存在半角逗号(即,)则用半角引号(即"")将该字段值包含起来。

(6)列内容如存在半角引号(即")则应替换成半角双引号("")转义,并用半角引号(即"")将该字段值包含起来。 

(7)文件读写时引号,逗号操作规则互逆。

(8)内码格式不限,可为 ASCII、Unicode 或者其他。

(9)不支持特殊字符

3.使用:(csv文件的导入导出)

先看下一个基本demo的ui:

(1)获取控件信息导入到csv文件中:

     void mainDialog::exportMsg()

     {

       //获取创建的csv文件名

       QString fileName = QFileDialog::getSaveFileName(this, tr("Excel file"), qApp->applicationDirPath (),

                                                   tr("Files (*.csv)"));

       if (fileName.isEmpty())

       return;

       //打开.csv文件

       QFile file(fileName);

       if(!file.open(QIODevice::WriteOnly | QIODevice::Text))

       {

           std::cerr << "Cannot open file for writing: "

                     << qPrintable(file.errorString()) << std::endl;

           return;

       }

       QTextStream out(&file);    

       //获取数据

       QString sName = ui->lineEdit->text();//姓名

       Int iAge = ui->spinBox->tvalue();//年龄

   

       out << tr("姓名:,") << sName << ",\n";

       out << tr("年龄:,") << iAge << ",\n";

       out << tr("1,") << tr("2,")<< tr("3,") << tr("4,") <<",\n";//表头          

       //获取表格内容

       int row = ui->tableWidget->rowCount();//表格总行数

       for(int i = 0; i < row; i ++)

       {

           for(int col = 0; col < 4; col++)

           {

               QString string = ui->tableWidget->item(i, col)->text();

               out << string << ",";// 写入文件

           }

           out << "\n";

       }

       QMessageBox::information(this, tr("导出数据成功"), tr("信息已保存在%1!").arg(fileName), tr("确定"));

       file.close();

}

这就是导出之后.csv文件中的内容:

(2)将csv文件中信息导入控件:

    void mainDialog::importMsg()

    {

        QString fileName = QFileDialog::getOpenFileName(this, tr("Excel file"), qApp->applicationDirPath (),

                                                   tr("Files (*.csv)"));

        QFile file(fileName);

        if(!file.open(QIODevice::ReadOnly | QIODevice::Text))

        {

           std::cerr << "Cannot open file for reading: "

                     << qPrintable(file.errorString()) << std::endl;

           return;

        }

        QStringList list;

        list.clear();

        QTextStream in(&file);

        int i =0;

        while(!in.atEnd())

        {

            QString fileLine = in.readLine();

            list = fileLine.split(",", QString::SkipEmptyParts);

            //姓名

            if(i == 0) ui->lineEdit->setText(list.at(1));

            //年龄

            if(i == 1) ui->spinBox->setValue(list.at(1));

            //表头

            if(i == 2) ui->tableWidget->setHorizontalHeaderLabels(QStringList() << list.at(0) << list.at(1)

                                                      << list.at(2) << list.at(3);       

            //表内容

            if(i == 3)

            {

                for(int a = 0; a < 4; a++)

                {

                    ui->tableWidget->setItem(0, a, new QTableWidgetItem(list.at(a)));

                }

            }

            if(i > 3)

            {

                for(int b = 0; b < 4; b++)

                {

                    ui->tableWidget->setRowCount(i-2);//设置添加一行

                    ui->tableWidget->setItem(i-3, b, new QTableWidgetItem(list.at(b)));

                }

            }

            i++;

        }

        file.close();

    }

好了,完成啦。。。
 

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qt导入CSV文件的数据可以通过以下步骤实现: 1. 首先,你需要创建一个CSV文件并将数据保存在其。你可以使用QFile和QTextStream类来实现。在创建CSV文件之前,你可以先检查是否存在CSV文件夹,如果不存在则创建一个。然后,使用时间格式来命名CSV文件,以确保文件名的唯一性。 2. 在写入CSV文件之前,你可以先判断文件是否存在。如果文件不存在,则说明是第一次写入数据,你可以在文件写入列名,以便在打开CSV文件时能够清晰地查看数据。 3. 使用QFile和QTextStream类打开CSV文件,并使用QTextStream的<<运算符将数据写入文件。按照CSV的格式,每列之间使用英文逗号分隔。 以下是一个示例代码,演示了如何在Qt导入CSV文件的数据: ```cpp QString strDir = QString("%1/%2").arg("C://").arg("CSV"); QDir dirCSV; if (!dirCSV.exists(strDir)) dirCSV.mkpath(strDir); m_strFilePath = strDir + "/" + QString("csv%1.csv").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd")); static QMutex mutex; mutex.lock(); QFile fileCSV(m_strFilePath); if (!fileCSV.exists()) { if (fileCSV.open(QIODevice::WriteOnly | QIODevice::Append | QIODevice::Text)) { QTextStream in(&fileCSV); QString strText = QString("DateTime,") + QString("Info"); in << strText << '\n'; fileCSV.close(); } } mutex.unlock(); ``` 这段代码首先创建了一个CSV文件夹,然后使用当前日期和时间来命名CSV文件。接下来,使用QFile和QTextStream打开CSV文件,并将列名写入文件。 请注意,这只是一个示例代码,你需要根据自己的需求进行适当的修改和扩展。 #### 引用[.reference_title] - *1* *2* [QT-CSV文件读写](https://blog.csdn.net/u013083044/article/details/124210294)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Qt/C++数据库应用1-数据导入导出csv](https://blog.csdn.net/feiyangqingyun/article/details/122403702)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值