No consigo pasar fichero .txt a vector tipo int

Iniciado por thehiphapper, 14 Agosto 2013, 15:09 PM

0 Miembros y 1 Visitante están viendo este tema.

thehiphapper

El fichero contiene lo siguiente:


3
3
0   2   2
1   1   2
2   3   2
3   1   4
4   2   2
5   3   4
6   1   4
7   1   2
8   3   3
9   1   4


Quería almacenar todo esto en: int Numeros[];

He probado a leer el fichero caracter por caracter y me lo lee bien, haciendo uso de la clase fileread, para que lo imprima bien hago:

Código (java) [Seleccionar]
int caract = fr.read();

  //Se recorre el fichero hasta encontrar el carácter -1
  //   que marca el final del fichero
  while(caract != -1)
  {
      //Mostrar en pantalla el carácter leído convertido a char
     
      System.out.print((char)caract);  
            caract = fr.read();
  }


Si no hago la conversion a tipo caracter, no me visualiza bien los numeros(me muestra otros numeros distintos), descarte esa opcion y probé con otro código, esta vez usando las clases FileInputStream, DataInputStream, BufferedReader y StringTokenizer. Ahora me pone null al ejecutar el siguiente codigo:

Código (java) [Seleccionar]
while ((strLinea = buffer.readLine()) != null)   {
               
             
               StringTokenizer st = new StringTokenizer(strLinea, "\t");
               while (st.hasMoreTokens()) {
                   
                           System.out.println(st.nextToken());


                   Numeros[cont]=Integer.parseInt(st.nextToken());
               cont++;    
               }
               
           }



¿cual es la manera mas sencilla y efectiva de pasar mi fichero .txt a int Numeros[]?


Gracias.
La droga quimica extrapeligrosa,
causante de la perdida de vidas hermosas,
es una plaga mundial no cualquier cosa,
un mal de sangre y el diablo se lo goza.

1mpuls0

#1
Antes de insertar comprueba si es un número.

Código (java) [Seleccionar]

private static boolean isNumber(String value) {
   try {
          Integer.parseInt(value);
          return true;
   } catch(NumberFormatException e) {
          return false;
   }
}


Código (java) [Seleccionar]

if(isNumber(String.valueOf(st.nextToken()))) {
   int num = Integer.parseInt(String.valueOf(st.nextToken()));
   //guardar en array
}


Saludos.
abc

thehiphapper

#2
Muchas gracias, muy ingenioso. Hay un pequeño problema, he puesto puntos de ruptura y la variable num, no coge ningún valor, debería cogerlo en la siguiente linea:

           
Código (java) [Seleccionar]
  int num = Integer.parseInt(String.valueOf(st.nextToken()));

En cambio cuando pasa de esa linea sin coger ningún valor, va directamente a:

Código (java) [Seleccionar]
catch (Exception e){ //Catch de excepciones
           System.err.println("Ocurrio un error: " + e.getMessage());
       }


el error que da es: Ocurrio un error: null

¿el error podría deberse a que cada vez que se llama a st.nextToken, analiza el siguiente string?,

No se si me explico, si por ejemplo el string es "1 Hola que tal", La clase StringTokenizer la primera vez que llamas a st.nextToken te llama al método isNumber y como es un numero retorna verdadero, pero a la hora de pasar el valor 1 a num, se llama de nuevo a st.nextToken por lo que intenta pasar "hola" a la variable entera num.
La droga quimica extrapeligrosa,
causante de la perdida de vidas hermosas,
es una plaga mundial no cualquier cosa,
un mal de sangre y el diablo se lo goza.

1mpuls0

Código (java) [Seleccionar]

private static void readFile() {
        try {
            FileReader file = new FileReader("Numbers.txt");
            BufferedReader buffered = new BufferedReader(file);
            String line;
            while ((line = buffered.readLine())!=null) {
                StringTokenizer tokenizer = new StringTokenizer(line);
               
                while (tokenizer.hasMoreTokens()) {
                    String value = tokenizer.nextToken();
                    if(isNumber(value)) {
                        int num = Integer.parseInt(value);
                        System.out.print("["+num+"]"+",");
                        //Guardar en arreglo.
                    }
                }
            }
        } catch (FileNotFoundException fnfe){
            fnfe.printStackTrace();
        } catch (IOException ioe){
            ioe.printStackTrace();
        }
   }


Código (java) [Seleccionar]

private static boolean isNumber(String value) {
        if(value!=null && !value.trim().equals("")) {
            try {
                Integer.parseInt(value);
                return true;
            } catch(NumberFormatException e) {
                return false;
            }
        } else {
            return false;
        }
    }
abc