zoukankan      html  css  js  c++  java
  • CSV

    1. 什么是CSV格式文档

         所谓“CSV”,是Comma Separated Value(逗号分隔值)的英文缩写,通常都是纯文本文件。通常CSV文件开头是不留空的,以行为单位,每行记录多项数据,每项数据用逗号 来分隔(标准英文逗号)。如用记事本写下:

    name_1, num_1, file_1
    name_2, num_1, file_2
    name_3, num_3, file_3

    保存为.csv 用excel 打开就是这样的:

    image

    2. 利用Qt写入CSV 文件

       Qt创建一个.csv文件就非常简单了:

    1 #include <QtCore/QCoreApplication>
    2 #include <QFile>
    3 #include <QString>
    4
    5  const QString FILE_PATH("E:\\test.csv");
    6
    7  int main(int argc, char *argv[])
    8 {
    9 QCoreApplication a(argc, argv);
    10
    11 QString line_0("0, aaa, 000\n");
    12 QString line_1("1, bbb, 111\n");
    13 QString line_2("2, ccc, 222\n");
    14 QFile csvFile(FILE_PATH);
    15
    16 if (csvFile.open(QIODevice::ReadWrite))
    17 {
    18 csvFile.write(line_0.toAscii());
    19 csvFile.write(line_1.toAscii());
    20 csvFile.write(line_2.toAscii());
    21 csvFile.close();
    22 }
    23 return a.exec();
    24 }

    结果为:

    image

        so easy.

    3. QT读取CSV 文件

    1 const QString FILE_PATH("E:\\test.csv");
    2
    3  int main(int argc, char *argv[])
    4 {
    5 QCoreApplication a(argc, argv);
    6
    7 QFile csvFile(FILE_PATH);
    8 QStringList CSVList;
    9 CSVList.clear();
    10
    11 if (csvFile.open(QIODevice::ReadWrite))
    12 {
    13 QTextStream stream(&csvFile);
    14 while (!stream.atEnd())
    15 {
    16 CSVList.push_back(stream.readLine());
    17 }
    18 csvFile.close();
    19 }
    20 Q_FOREACH(QString str, CSVList)
    21 {
    22 qDebug() << str<<"\n";
    23 }
    24 return a.exec();
    25 }

    结果:

    image

    4. 一个简易的CSV解析器

        基于以上的介绍,实现一个CSV Parser就非常简单了。

    .h

    1 #pragma once
    2 #include <QStringList>
    3 #include <QFile>
    4 #include <boost/shared_ptr.hpp>
    5
    6  class CSVParser
    7 {
    8  public:
    9 CSVParser(QString filePath);
    10 ~CSVParser(void);
    11
    12  public:
    13 bool setCSVData(const QStringList& CSVList);
    14 QStringList getCSVData();
    15
    16  private:
    17 boost::shared_ptr<QFile> CSVFile_;
    18 };

    .cpp

    1 #include <QTextStream>
    2
    3 #include "CSVParser.h"
    4
    5 CSVParser::CSVParser(QString filePath)
    6 {
    7 CSVFile_ = boost::shared_ptr<QFile>(new QFile(filePath));
    8 CSVFile_->open(QIODevice::ReadWrite);
    9 }
    10
    11 CSVParser::~CSVParser(void)
    12 {
    13 CSVFile_->close();
    14 }
    15
    16  // 注意, QStringList 的参数必须符合csv格式: 逗号分隔,\n结尾
    17 bool CSVParser::setCSVData(const QStringList& CSVList)
    18 {
    19 if (CSVList.empty())
    20 return false;
    21
    22 if (!CSVFile_->isOpen())
    23 return false;
    24
    25 if (!CSVFile_->resize(0))
    26 return false;
    27
    28 Q_FOREACH(QString str, CSVList)
    29 {
    30 CSVFile_->write(str.toAscii());
    31 }
    32 CSVFile_->flush();
    33 return true;
    34 }
    35 QStringList CSVParser::getCSVData()
    36 {
    37 QStringList CSVList;
    38 CSVList.clear();
    39
    40 QTextStream stream(CSVFile_.get());
    41
    42 while (!stream.atEnd())
    43 {
    44 CSVList.push_back(stream.readLine());
    45 }
    46
    47 return CSVList;
    48
    49 }
  • 相关阅读:
    两数之和
    Go网络编程UDP
    Go网络编程TCP
    Go_json
    Iris_xorm
    Go初始化结构体数组/切片
    Iris_xorm
    pyhon之函数参数
    python之深浅拷贝
    python作业之用户管理程序
  • 原文地址:https://www.cnblogs.com/sld666666/p/1962121.html
Copyright © 2011-2022 走看看