Ver Mensaje Individual
  #1 (permalink)  
Antiguo 30/01/2010, 04:24
Avatar de genuine_carlosV2
genuine_carlosV2
 
Fecha de Ingreso: noviembre-2008
Ubicación: 127.0.0.1
Mensajes: 296
Antigüedad: 15 años, 6 meses
Puntos: 6
EOF() no funciona

Buenas a todos!

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:
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 == ',' );
	}
}
Como comenté, también lo probé con C (mediante 'fscanf' pero el resultado fué el mismo).

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