Mi pregunta/problema es el siguiente:
Tengo un archivo CSV con el siguiente formato:
<double>,<double>,<double>,...,<double>
<double>,<double>,<double>,...,<double>
...
<double>,<double>,<double>,...,<double>
Es decir, los números estan separados por comas (,). Al finalizar una hilera de números (un registro), hay un salto de linea.
A priori no se ni cuantos registros hay (hileras) ni cuantos campos tiene cada registro (columnas).
Para leer y cargar este archivo, he echo el siguiente algoritmo (tanto en C como en C++):
Código:
Como comenté, también lo probé con C (mediante 'fscanf' pero el resultado fué el mismo).void loadDataSet() { ifstream dataSetFile; dataSetFile.open( "test.csv", ios::in ); char c; double value; while( !dataSetFile.eof() ) { Register r; do { dataSetFile >> value; dataSetFile >> c; cout << "Dato: " << value << endl; r.value.push_back( value ); } while( c == ',' ); } }
El resultado de este algoritmo es que me lee todos los números pero:
1) La precisión decimal que lee es de 6 cifras decimales cuando los números son en realidad de 12 cifras decimales
2) Lee todos los números hasta el final pero cuando llega al final del archivo, continua leyendo indefinidamente y capturando como 'value' el último número del archivo
Alguna idea de como hacer para coger todos los decimales? Y como puedo hacer para que el EOF() funcione como dios manda?
A ser posible, podrían explicarme porque el EOF() no me funciona?
Muchas gracias por su tiempo
Carlos