Leer datos desde archivo texto pasarlo a matriz [JAVA]

bornex

Hola a todos, tengo un problema y no tengo pantalones a hacerlo...

Veamos, expongo el problema:

Tengo un archivo de texto con lo siguiente:

		A;B;C
1.1;1.2;1.3
2.1;2.2;2.3
3.1;3.2;3.3

La cabecera es A;B;C y lo que quiero es leer los datos de ese archivo y meterlos en una matriz (array doble) de doubles sin la cabecera (porque no son doubles).

El código que hago es el siguiente (esta mal claramente):

private double[][] leerDatos(File archivoTexto, int filas, int columnas)
			throws IOException {

	BufferedReader br = new BufferedReader(new FileReader(archivoTexto));
	Scanner src = new Scanner(br);
	src.useDelimiter(";");
	while (src.hasNextDouble()) {
			for (int i = 0; i < filas; i++)
				for (int j = 0; j < columnas; j++)
					this.datos[i][j] = src.nextDouble();
	}
	br.close();
	return this.datos;
}

No entra en el bucle, se que la primera linea es de Char y por eso no entra. ¿Cómo hago para saltarme la primera línea del fichero? ¿Se arreglaría así el problema o tengo que pasar todas las lineas a double?

La verdad que no se como hacerlo, si me pueden echar una mano lo agradecería.

Un saludo. Espero haberme explicado.

Merkury

Ehmmmm Scanner no era un metodo para leer datos desde consola?

1 respuesta
Lecherito

#1 Con un scanner.nextLine(); antes de cambiar el delimiter.

1 respuesta
bornex

#2 Scanner es para leer datos y puedes usar un delimitador para trocear el String.

#3 Si pongo el nextLine() no me lo hace. :S se te ocurre otra cosa?

2 respuestas
Merkury

#4 Cuenta las lineas del fichero antes de nada y empieza el bucle en la segunda.

Spacelord

Diría que no entra en el bucle porque el primer carácter que lee es un char, ergo el src.hasNextDouble no se cumple en la primera iteración del while y por eso acaba el programa.

Yo lo que haría es recorrer todo el archivo desde el principio y evaluar el carácter a cada iteración: si el carácter actual es un double, meterlo en el array. Si no lo es, pasar al siguiente. Así hasta el fin del archivo.

Lecherito

#4 Sinceramente, si el fichero es pequeño etc, no te comas la cabeza, haz un nextLine() un split por ";" y un parseDouble para meterlo al array, no te quemes la cabeza.

Y un nextLine al principio sí que funciona.

Al leer enteros, doubles etc, el scanner no suele leer el delimitador o la nueva línea y eso crea problemas, con la manera que te digo te los ahorras.

Usuarios habituales

  • Lecherito
  • Spacelord
  • Merkury
  • bornex