2009-07-02 13 views
6

Was ist der beste Weg, um eine tabulatorgetrennte Datei in C++ einzulesen und jede Zeile als Datensatz zu speichern? Ich habe nach einer Open-Source-Bibliothek gesucht, die mir dabei geholfen hat, aber es war nicht erfolgreich, also sieht es so aus, als müsste ich meine eigene schreiben.Abgegrenzte Dateien in C++ lesen

+1

Ich war erstaunt, dass, wenn ich nach diesem suchte, ich nicht einfach irgendwo Code für so eine einfache Sache zupfen konnte. Wie auch immer, ich schrieb einen Blog für meine Lösung (basierend auf anderen Antworten auf Stack Exchange) [C++ Tidbits] (http://goo.gl/y0bOVv) – Wybird666

Antwort

17
typedef vector<vector<string> > Rows; 
Rows rows; 
ifstream input("filename.csv"); 
char const row_delim = '\n'; 
char const field_delim = '\t'; 
for (string row; getline(input, row, row_delim);) { 
    rows.push_back(Rows::value_type()); 
    istringstream ss(row); 
    for (string field; getline(ss, field, field_delim);) { 
    rows.back().push_back(field); 
    } 
} 

Dies wird Ihnen den Anfang machen. Es wird nicht überprüft, dass jede Zeile die gleiche Anzahl von Feldern hat. Lassen Sie field_delim usw. aus.

+0

dieser Code funktioniert Bot im Visual Studio. Der Fehler ist ein Fehler "C4430: fehlender Typspezifizierer - int angenommen". Ich habe enthalten string.h – tumchaaditya

+0

Code kompiliert gut auf CentOS mit g ++. Nicht sicher, was du nicht hinzugefügt hast, damit es funktioniert – thaweatherman

5

Es gibt kein Problem bei der Verwendung von Iostreams - Sie könnten jede Zeile mit getline in string lesen und dann Stringstream für diese Zeichenfolge verwenden, um über Felder zu iterieren.