2016-04-12 8 views
0

Ich arbeite mit einer CSV-Datei mit einem Komma (,) als Trennzeichen. Eine bestimmte Zeile in der Textdateiversion der CSV-Datei sieht folgendermaßen aus.Wie lese ich nur einen bestimmten Teil dieser Zeile in eine Struktur?

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

Ich möchte nur store "MONTREAL/Pierre Elliott Trudeau INTL", minus die Anführungszeichen können. Daher möchte ich STATION NAME nicht speichern können. Basierend auf meinen Recherchen sieht mein Code so aus.

#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; 
} 

Jede Hilfe würde sehr geschätzt werden.

+0

Dies ist nichts weiter als das Parsen einer CSV-formatierten Datei. Gehen Sie zu Google und Sie finden viele Beispiele. –

Antwort

0

Es gibt zwei Möglichkeiten, diesen

beides verwenden „C“ string zu lösen. Sie können string.c_str() verwenden, um das zu bekommen.

  1. einen Blick auf strtok nehmen() - dies wird eine Zeichenfolge basierend auf einigen Trennzeichen (in Ihrem Fall das Komma) aufzubrechen. unter Linux/UNIX Typ 'man strtok'

  2. Setzen Sie einen Zeiger auf den Anfang der Zeichenfolge und Schleife, bis Sie das Komma treffen. Erhöhen Sie dann den Zeiger um eins (um das Komma zu übergeben) und speichern Sie diese Position (setzen Sie einen Zeiger darauf). Jetzt weiter nach dem nächsten Komma suchen. Wenn Sie das nächste Komma haben, können Sie alle Zeichen vom Startzeiger zum Endzeiger kopieren.

zum Beispiel:

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++; 

die oben ist nicht wirklich effizient, da Sie zweimal scannen, was Sie tun können, ist, nachdem Sie das erste Komma gefunden Sie tun können,

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

Die "& & * ptr" sucht nach einem NULL, der das Ende einer Zeichenfolge abgrenzt.

Verwandte Themen