2009-07-02 16 views
6

Qual è il modo migliore per leggere in un file delimitato da tabulazioni in C++ e memorizzare ogni riga come record? Sono stato alla ricerca di una libreria open source per aiutare con questo, ma non hanno avuto successo, quindi sembra che dovrò scrivere il mio.Lettura file delimitati in C++

+1

Mi sono stupito che quando ho cercato questo, non ero in grado di strappare semplicemente del codice da qualche parte per una cosa così semplice. Ad ogni modo, ho scritto un blog per la mia soluzione (basata su altre risposte su Stack Exchange) [C++ Tidbits] (http://goo.gl/y0bOVv) – Wybird666

risposta

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

Questo ti consente di iniziare. Non esegue alcuna verifica che ogni riga abbia lo stesso numero di campi, consentire l'escape field_delim, ecc.

+0

questo codice funziona con bot in Visual Studio. l'errore è errore "C4430: identificatore di tipo mancante - int assunto". Ho incluso string.h – tumchaaditya

+0

Il codice compila bene su CentOS con g ++. Non sei sicuro di cosa non hai aggiunto per farlo funzionare – thaweatherman

5

Non vi è alcun problema nell'utilizzo di iostreams: è possibile leggere ogni riga con getline in stringa e quindi utilizzare stringstream su quella stringa per eseguire un'iterazione sui campi.