QT中读取和写入CSV格式文档
2013-12-04 11:59
483 查看
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 打开就是这样的:
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 }
结果为:
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 }
结果:
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 }
相关文章推荐
- 用python 读取和写入CSV格式的文件
- python读取与写入csv格式文件的示例代码
- Qt软件开发文档16---软件更新:写入程序版本信息并读取程序的版本号
- Qt软件开发文档16---软件更新:写入程序版本信息并读取程序的版本号
- PHP读取、写入、删除CSV文件的操作
- PHP读取csv文件转换成JSON并写入新的文件
- 如何根据CSV格式的第一列作为key,将后几列作为字符串放入map集合并写入文件的操作
- 一个java读取word文档并将其写入xml文档的例子
- 关于XML文档读取写入的简单操作
- Python读取txt内容写入xls格式的excel中
- java实现以某种格式按行读取写入文件
- csv格式读取通用类
- Qt读取ANSI格式文件——利用QTextCodec将其他编码格式转换为Unicode格式
- ACE读取ini格式的配置文档
- ACE读取ini格式的配置文档
- ean13码的生成,python读取csv中数据并处理返回并写入到另一个csv文件中
- Java从.CSV文件中读取数据和写入
- Sqlite DateTime读取和写入格式问题
- [php]在PHP中读取和写入WORD文档的代码
- (个人)读取A.CSV修改它的某列,写入B.CSV