2009-07-02 71 views
6

¿Cuál es la mejor manera de leer en un archivo delimitado por tabulaciones en C++ y almacenar cada línea como un registro? He estado buscando una biblioteca de código abierto para ayudar con esto, pero no he tenido éxito, así que parece que tendré que escribir la mía.Lectura de archivos delimitados en C++

+1

Me sorprendió que cuando busqué esto, no pude simplemente arrancar algún código de alguna parte para algo tan simple. De todos modos, escribí un blog para mi solución (basado en otras respuestas en Stack Exchange) [C++ Tidbits] (http://goo.gl/y0bOVv) – Wybird666

Respuesta

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

Esto le permitirá comenzar. No hace ninguna comprobación de que cada fila tenga el mismo número de campos, permita el escape de field_delim, etc.

+0

este código no funciona en Visual Studio. el error es el error "C4430: especificador de tipo faltante - int asumido". He incluido string.h – tumchaaditya

+0

El código compila bien en CentOS con g ++. No estoy seguro de lo que no agregó para que funcione – thaweatherman

5

No hay problema en el uso de iostreams: puede leer cada línea con getline en una cadena, y luego usar stringstream en esa cadena para iterar sobre los campos.