zoukankan      html  css  js  c++  java
  • Qt中csv文件的导入与导出

    转自:http://blog.csdn.net/mingxia_sui/article/details/7683030

    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 << ", ";

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

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

           //获取表格内容

           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 << " ";

           }

           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();

        }

    好了,完成啦。。。

  • 相关阅读:
    js多个基本类型计算
    移动端弹窗滚动穿透问题
    length-of-longest-substring 无重复字符的最长子串 javascript解答
    addTwoNumbers两数之和 javascript解答
    two-sum两数之和 javascript解答
    js防抖和节流
    React / Vue 项目时为什么要在列表组件中写 Key,其作用是什么?
    二进制文件流处理笔记
    ES6 class 类的理解(一)
    django之js模板插件artTemplate的使用
  • 原文地址:https://www.cnblogs.com/lpxblog/p/6042339.html
Copyright © 2011-2022 走看看