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