读写CSV文件
CSV:逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样被解读的数据。CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。通常,所有记录都有完全相同的字段序列,通常都是纯文本文件。C++默认没有提供csv读写库,因此自己给予vector简单实现了一下。
1、功能
写入文件到CSV;
读CSV文件,并按照行输出;
2、代码
#include <iostream>
#include <vector>
#include <string>
#include <fstream>
#include <sstream>
using namespace std;
void WriteToCSV(const char* strFileName,vector<vector<string> > &v)
{
//写文件
ofstream outFile;
outFile.open(strFileName, ios::out); //打开模式可省略
for(int i=0;i<v.size();i++)
{
string tmp="";
for(int j=0;j<v[i].size();j++)
{
if(j==(v[i].size()-1))
{
tmp += v[i][j];
}else
{
tmp += v[i][j];
tmp += ",";
}
}
outFile<<tmp<<endl;
}
outFile.close();
}
void TestWriteToCSV()
{
cout<<"WriteToCSV:\n";
vector<vector<string> > v;
std::vector<string> vArray;
vArray.push_back("001");
vArray.push_back("alice");
vArray.push_back("25");
v.push_back(vArray);
WriteToCSV("TestCSV.csv",v);
}
void ReadFromCSV(const char* strFileName)
{
//读文件
ifstream inFile(strFileName, ios::in);
string lineStr;
vector<vector<string> > strArray;
while (getline(inFile, lineStr))
{
//打印整行字符串
cout << lineStr << endl;
//存成二维表结构
stringstream ss(lineStr);
string str;
vector<string> lineArray;
//按照逗号分隔
while (getline(ss, str, ','))
lineArray.push_back(str);
strArray.push_back(lineArray);
}
}
void TestReadFromCSV()
{
cout<<"ReadFromCSV:\n";
ReadFromCSV("TestCSV.csv");
}
int main(int argc, char const *argv[])
{
/* code */
TestWriteToCSV();
TestReadFromCSV();
return 0;
}
3、说明
当前已在Ubuntu16.04 g++ 5.5.0上测试通过。