1. 程式人生 > 其它 >c++讀取部分資料缺實的CSV檔案的方法實現

c++讀取部分資料缺實的CSV檔案的方法實現

技術標籤:筆記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;
}