当前位置:   article > 正文

c++读取部分数据缺失的CSV文件的方法实现_读取csv数据文件中的内容 过滤掉为空的 c++

读取csv数据文件中的内容 过滤掉为空的 c++

概述

读取数据有缺失的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;
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38

  • 1
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/278013
推荐阅读
相关标签
  

闽ICP备14008679号