菜菜由于状态不好,一个简单的问题,也搞了好久,想想还是记录下来,万一哪天又转不过来了
划重点,注意csv文件中是n行m列的数据,用vector实现,初始化一个二维vector就可以很容易实现了,用vector一部分原因是可以进行push操作,也就是直接调用vector的函数进行存取值;
vector 的简单操作可以参考这篇博客:click me
放上代码
#include <iostream>
#include <vector>
#include <string>
#include <sstream>
#include <fstream>
using namespace std;
int main(){
ifstream fs;
fs.open("D:\\data.csv");
//二维vector的定义,注意第二个尖括号,一般要空一格
vector<vector<string> > vec;
//getline可以读取一整行,得到line
string line;
while (getline(fs, line)){
stringstream ss(line);
string str;
//再定义一个一维vector
vector<string> row;
//注意是从一行里面取字符串,字符串之间是逗号分隔的;
//这是由于csv文件保存的时候,表格里每个格子是以逗号为分隔值的
while (getline(ss, str, ',')){
row.push_back(str); //直接 push 到 row 里
}
vec.push_back(row); //整行 push 进最终数组里
}
// 写到csv中验证一下
string filename = "test.csv";
write(filename, vec);
return 0;
}
注:a.txt
文件需要放到代码同一级目录下,内容如下:
a,b,c,d
e,f,g,h
i,j,k,l
运行程序就能生成对应的 csv 表格了!
write()
函数可以将嵌套的 vector 中的数据写入到表格中
-
其中的
stringstream
的使用可以参考:click me -
auto
关键字可以自动判断变量类型,下面的代码中,第一个 auto 等价于vector<string>
,第二个 auto 等价于string
; -
C++ 中冒号
:
的使用方法可以参考:click me
void write(string filename, vector<vector<string> > &data){
ofstream outFile;
outFile.open(filename,ios::out);
for(auto row : data){
for (auto item : row){
outFile << item << ",";
}
outFile << endl;
}
cout<<"OK"<<endl;
}
如果因为自己的devc++版本问题,导致auto无法被识别,可以改一下编译选项(工具)

结束啦!