C++讀取csv表格文件到vector


這個CSV文件假設知道每行有多少個數,也知道數據的格式,即可使用下面簡單的方法實現。

我們假設每行有4個數據,依次是int,int,float,float

基本思路是:把每行的數據定為一個類型,放在vector中,方便查找使用。使用FILE讀文件,fscanf快速把已知格式的數據讀進來。

 

 1 #include <iostream>
 2 #include <fstream>
 3 #include <vector>
 4 #include <string>
 5 
 6 using namespace std;
 7 
 8 class csvdata{
 9 public:
10     int id;
11     int level;
12     float price;
13     float cost;
14 };//行的類定義
15 
16 int main()
17 {
18     vector<csvdata> incsv;
19     csvdata intp;
20     FILE *fp;
21     fp=fopen("D:\\111.csv","r");//你自己的文件路徑
22     while(1){
23         fscanf(fp,"%d,%d,%f,%f",&intp.id,&intp.level,&intp.price,&intp.cost);
24         incsv.push_back(intp);
25         if (feof(fp))break;
26     }
27     fclose(fp);
28     for(int i=0;i<incsv.size();i++)
29     {
30         cout<<incsv[i].id<<" "<<incsv[i].level<<" "<<incsv[i].price<<" "<<incsv[i].cost<<endl;
31         
32     }//輸出顯示每行的數據
33 
34 
35 system("pause");
36 return 0;
37 }

 

如果不知道csv每行的個數和格式類型,也可以統一用string來讀取,只是比上面方法稍麻煩。

 1 #include <iostream>
 2 #include <fstream>
 3 #include <sstream>
 4 #include <string>
 5 #include <vector>
 6 
 7 using namespace std;
 8 
 9 string Trim(string& str)
10 {
11  str.erase(0,str.find_first_not_of(" \t\r\n"));
12 
13  str.erase(str.find_last_not_of(" \t\r\n") + 1);
14 
15  return str;
16 }
17 
18 int main()
19 {
20  ifstream fin("test.csv");
21 
22  string line; 
23  while (getline(fin, line)) {
24   //cout << line << endl;
25 
26   istringstream sin(line); 
27   vector<string> fields; 
28   string field;
29   while (getline(sin, field, ',')) {
30    fields.push_back(field); 
31   }
32 
33   string name = Trim(fields[0]); 
34   string age = Trim(fields[1]); 
35   string birthday = Trim(fields[2]); 
36   cout << name << "\t" << age << "\t" << birthday << endl;
37  }
system("pause");
return 0;
38 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM