2016-04-12 3 views
0

Я работаю с файлом csv с запятой (,) в качестве разделителя. Определенная строка в текстовой версии файла csv выглядит так.Как я могу прочитать определенную часть этой строки в структуре?

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

Я хочу, чтобы иметь возможность хранить только «MONTREAL/PIERRE Трюдо INTL», минус кавычки. Поэтому я хочу иметь возможность не хранить STATION NAME. Основываясь на моих исследованиях, мой код выглядит так.

#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. Перейдите в Google, и вы найдете множество примеров. –

ответ

0

Есть два способа решения этой

оба они используют строку «C». вы можете использовать string.c_str(), чтобы получить это.

  1. смотреть на strtok() - это разбить строку, основанную на некотором разделителем (в вашем случае запятой). на Linux/UNIX type 'man strtok'

  2. установить указатель на начало строки и цикл, пока вы не нажмете запятую. Затем увеличьте указатель на один (чтобы перейти через запятую) и сохраните эту позицию (установите для нее указатель). Теперь продолжайте искать следующую запятую. Когда у вас есть следующая запятая, вы можете скопировать все символы из указателя начала в конец указателя.

, например:

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, который ограничивает конец строки.

Смежные вопросы