Foro de elhacker.net

Programación => Java => Mensaje iniciado por: thehiphapper en 14 Agosto 2013, 15:09 pm



Título: No consigo pasar fichero .txt a vector tipo int
Publicado por: thehiphapper en 14 Agosto 2013, 15:09 pm
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
  1. int caract = fr.read();
  2.  
  3.   //Se recorre el fichero hasta encontrar el carácter -1
  4.   //   que marca el final del fichero
  5.   while(caract != -1)
  6.   {
  7.       //Mostrar en pantalla el carácter leído convertido a char
  8.  
  9.       System.out.print((char)caract);  
  10.             caract = fr.read();
  11.   }

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
  1. while ((strLinea = buffer.readLine()) != null)   {
  2.  
  3.  
  4.                StringTokenizer st = new StringTokenizer(strLinea, "\t");
  5.                while (st.hasMoreTokens()) {
  6.  
  7.                            System.out.println(st.nextToken());
  8.  
  9.  
  10.                    Numeros[cont]=Integer.parseInt(st.nextToken());
  11.                cont++;    
  12.                }
  13.  
  14.            }


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


Gracias.


Título: Re: No consigo pasar fichero .txt a vector tipo int
Publicado por: 1mpuls0 en 14 Agosto 2013, 18:06 pm
Antes de insertar comprueba si es un número.

Código
  1. private static boolean isNumber(String value) {
  2.    try {
  3.           Integer.parseInt(value);
  4.           return true;
  5.    } catch(NumberFormatException e) {
  6.           return false;
  7.    }
  8. }
  9.  

Código
  1. if(isNumber(String.valueOf(st.nextToken()))) {
  2.    int num = Integer.parseInt(String.valueOf(st.nextToken()));
  3.    //guardar en array
  4. }
  5.  

Saludos.


Título: Re: No consigo pasar fichero .txt a vector tipo int
Publicado por: thehiphapper en 15 Agosto 2013, 11:07 am
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
  1.  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
  1. catch (Exception e){ //Catch de excepciones
  2.            System.err.println("Ocurrio un error: " + e.getMessage());
  3.        }

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.


Título: Re: No consigo pasar fichero .txt a vector tipo int
Publicado por: 1mpuls0 en 15 Agosto 2013, 17:19 pm
Código
  1. private static void readFile() {
  2.        try {
  3.            FileReader file = new FileReader("Numbers.txt");
  4.            BufferedReader buffered = new BufferedReader(file);
  5.            String line;
  6.            while ((line = buffered.readLine())!=null) {
  7.                StringTokenizer tokenizer = new StringTokenizer(line);
  8.  
  9.                while (tokenizer.hasMoreTokens()) {
  10.                    String value = tokenizer.nextToken();
  11.                    if(isNumber(value)) {
  12.                        int num = Integer.parseInt(value);
  13.                        System.out.print("["+num+"]"+",");
  14.                        //Guardar en arreglo.
  15.                    }
  16.                }
  17.            }
  18.        } catch (FileNotFoundException fnfe){
  19.            fnfe.printStackTrace();
  20.        } catch (IOException ioe){
  21.            ioe.printStackTrace();
  22.        }
  23.   }
  24.  

Código
  1. private static boolean isNumber(String value) {
  2.        if(value!=null && !value.trim().equals("")) {
  3.            try {
  4.                Integer.parseInt(value);
  5.                return true;
  6.            } catch(NumberFormatException e) {
  7.                return false;
  8.            }
  9.        } else {
  10.            return false;
  11.        }
  12.    }
  13.