基于vector容器的csv文件读取和写入

菜菜由于状态不好,一个简单的问题,也搞了好久,想想还是记录下来,万一哪天又转不过来了

划重点,注意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无法被识别,可以改一下编译选项(工具)

结束啦!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值