2016-04-12 55 views
0

我正在使用帶逗號(,)作爲分隔符的csv文件。文本文件版本的csv文件中的某一行看起來像這樣。如何只將這一行的某個部分讀入結構?

Station Name,MONTREAL/PIERRE ELLIOTT TRUDEAU INTL,,,,,,,,,,,,,,,,,,,,,,, 

我想只能存儲「MONTREAL/PIERRE ELLIOTT TRUDEAU INTL」,減去引號。因此,我希望能夠不存儲電臺名稱。根據我的研究,我的代碼看起來像這樣。

#include<string> 
#include<sstream> 
#include<fstream> 
using namespace std; 

struct company_data 
{ 
    string station_name, province, climate_identifier, TC_identifier, time_info; 
    float latitude, longitude; 
    int WMO_identifier; 
    string E, M, NA, symbol; 
}; 

void accept_company_data (company_data initial) 
{ 
    ifstream infile; 
    infile.open("eng-hourly-montreal-wind_dec_2015.csv"); 
    string line, temp1,temp2; 
    getline (infile, line); 
    istringstream iss(line); 
    iss>>temp1; 
    iss>>initial.station_name; 
    cout<<initial.station_name; 
} 

任何幫助將不勝感激。

+0

這只不過是解析一個CSV格式的文件。去谷歌,你會發現很多的例子。 –

回答

0

有解決這個

這兩種使用「C」字符串兩種方式。你可以使用string.c_str()來獲取它。

  1. 看看strtok() - 這將打破基於一些分隔符(在你的情況下逗號)的字符串。在Linux/UNIX上鍵入'man strtok'

  2. 設置一個指向字符串開頭的指針並循環,直到您點擊逗號。然後將指針加1(以通過逗號)並保存該位置(設置一個指針)。現在繼續尋找下一個逗號。當你有下一個逗號時,你可以將所有的字符從開始指針複製到結束指針。

例如:

char *string = "you're input,with commas, in it"; 
char *start_pointer, *end_pointer, *ptr; 

ptr = string; 
while (*ptr!=',') ptr++; // scan along looking for comma 
ptr++; // the above while, will have stopped on the comma 
start_pointer=ptr; 
while (*ptr!=',' && *ptr) ptr++; 
end_pointer=ptr; 

//now you can copy to your destination 
char destination_buffer[128]; 
char *des=destination_buffer; 
for(ptr=start_pointer;ptr<end_pointer;) *des++=*ptr++; 

上面是不是真的有效,因爲你掃描兩次 你可以做的是你找到的第一個逗號後面 你可以做

while(*ptr!=','&&*ptr) *des++=*ptr++; 

「& & * ptr」正在尋找分隔字符串結尾的NULL。

相關問題