QT中读取和写入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.

头文件加上#include<QStringList>

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 }
  • 6
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值