c++读取部分数据缺失的CSV文件的方法实现

概述

读取数据有缺失的csv文件,保存到二维vector数组。

在这里插入图片描述

对于上图这种类型的csv文件,注意看到最后一列的部分数据是缺失的,如果用txt文件打开会是这样的。

在这里插入图片描述
我是用读取txt的方式读取该文件的,如果直接读取,最后一列会有3个数据读取不到。我的方法是先读取第一行的数据个数记作col,这样就知道了每一行应该有多少个数据。如果最后发现读取的容器在某一行的个数少于col就表示最后的一个数字空缺了,需要额外push_back到容器中。(如果中间某个数空缺了,不必担心,对应的txt文件会有多余的逗号分隔)

此处第3行第C列空缺

会有对应的逗号分割在下方的实现代码中可以作为空字符串读取到容器中


```cpp
void csv_read(string path, vector<vector<string> >& csv)
{
	ifstream inFile(path, ios::in);
	string lineStr;
	int row=0;
	int col=0;
	int number=0;//为0时代表只是读取第一行的数据,用来给col判断,使得col能得到第一行的数据个数
	while (getline(inFile, lineStr))
	{
		// 存成二维表结构  
		stringstream ss(lineStr);
		string str;
		vector<string> lineArray;
		// 按照逗号分隔  
		while (getline(ss, str, ','))
		{
			lineArray.push_back(str);
			if (number==0)
			{
				col++;
			}	
		}
		csv.push_back(lineArray);
		number++;//一旦number++ 就表示开始读取第二行了 再执行上面的while (getline(ss, str, ','))循环时,col就不会++  这时col就记录了完整的列个数
		row++;
	}
	for (int i=1;i<csv.size();i++)//对每一行的个数如果小于col的个数表明最后的一个数字空缺了,需要额外push_back到容器中
	{
		while (csv[i].size()<col)
		{
			csv[i].push_back("");
		}
	}
	return;
}


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值