Foros del Web » Programación para mayores de 30 ;) » Java »

Lectura ficheros de texto (Basica)

Estas en el tema de Lectura ficheros de texto (Basica) en el foro de Java en Foros del Web. Buenas, a ver, necesito ayuda, tengo un archivo de texto con el siguiente contenido; Cita: Name Age Nat St Tk Ps Sh Ag KAb TAb ...
  #1 (permalink)  
Antiguo 09/04/2013, 04:08
 
Fecha de Ingreso: abril-2013
Mensajes: 3
Antigüedad: 11 años
Puntos: 0
Lectura ficheros de texto (Basica)

Buenas, a ver, necesito ayuda, tengo un archivo de texto con el siguiente contenido;
Cita:
Name Age Nat St Tk Ps Sh Ag KAb TAb PAb SAb Gam Min Sav Ktk Kps Sht Gls Ass DP Inj Sus Fit
----------------------------------------------------------------------------------------------------
Ter_Stegen 20 ale 8 1 1 1 35 268 300 300 300 37 3431 252 0 0 0 0 0 2 0 0 100
Hans_Butt 38 ale 5 1 1 1 32 941 300 300 300 6 556 56 0 0 0 0 0 0 0 0 100
Lahm 28 ale 1 8 5 1 39 280 362 702 730 25 2228 0 55 33 7 0 4 32 0 3 100
Lo que quiero que haga el programa es sumar las edades (20, 38 y 28 que he marcado).

He hecho lo siguiente;

Código:
    package edad;

    import java.io.File;
    import java.util.Scanner;
    public class edad {
       
       public static void main (String []args){
          int edadtot = 0;
          String nombreFichero = "D/datos/BAY.txt";
          try{
             Scanner plantilla = new Scanner(new File (nombreFichero));
             plantilla.nextLine();
             plantilla.nextLine();
             while (plantilla.hasNextLine()){
                edadtot = edadtot + plantilla.nextInt();
             }
             plantilla.close();
          }
          catch (Exception e){}
          System.out.print(edadtot);
          }

    }
Pero me da 0 siempre que ejecuto el programa

He probado a quitar los 2 "plantilla.nextLine()" que puse, y también me da error.

Esta es otra, que no se si esta bien hecho eso de poner "plantilla.nextLine()" para saltarme una línea. ¿Se hace asi o es de otra forma?


Un saludo y gracias de antemano, espero haberme explicado bien.

Última edición por HelThunder; 09/04/2013 a las 04:29
  #2 (permalink)  
Antiguo 09/04/2013, 05:38
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 15 años, 8 meses
Puntos: 188
Respuesta: Lectura ficheros de texto (Basica)

while (plantilla.hasNextLine()){
//edadtot = edadtot + plantilla.nextInt();
}

En teoria estás cogiendo la tercera linea e intentando parsear a int algo que no lo es.

Prueba esto y trata de entender lo que pasa:

while (plantilla.hasNextLine()){
String texto = plantilla.nextLine();
System.out.println(texto);
String[] separat = texto.split(" ");
// Suponiendo que entre el nombre y la edad hay un espacio en blanco creo que esto deberia funcionar
edadtot = edadtot + Integer.valueOf(separat[1]).intValue();
}
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}
  #3 (permalink)  
Antiguo 09/04/2013, 07:34
 
Fecha de Ingreso: abril-2013
Mensajes: 3
Antigüedad: 11 años
Puntos: 0
Respuesta: Lectura ficheros de texto (Basica)

Muchas gracias Fuzzylog.

Ya he conseguido solucionarlo, pero ahora me surge un nuevo problema.

Primero pongo como lo he solucionado;
Código:
	public static void main (String []args){
		String nombreFichero = "D:/datos/BAY.txt";
		try{
			String texto = ""; int edad;
			Scanner plantilla = new Scanner(new File (nombreFichero));
			plantilla.nextLine();
			plantilla.nextLine();
			while (plantilla.hasNextLine()){
			    texto = plantilla.nextLine().substring(14, 16);
				edad = Integer.valueOf(texto);
				System.out.println(edad);
			}
			plantilla.close();
		}
		catch (Exception e){}
		}
  #4 (permalink)  
Antiguo 09/04/2013, 07:38
 
Fecha de Ingreso: abril-2013
Mensajes: 3
Antigüedad: 11 años
Puntos: 0
Respuesta: Lectura ficheros de texto (Basica)

El caso es que el fichero es este;


Código:
Ter_Stegen    20 ale  8  1  1  1 35 268 300 300 300  37 3431 252   0   0   0   0   0   2   0   0 100
Hans_Butt     38 ale  5  1  1  1 32 941 300 300 300   6  556  56   0   0   0   0   0   0   0   0 100
Lahm          28 ale  1  8  5  1 39 280 362 702 730  25 2228   0  55  33   7   0   4  32   0   3 100
Hummels       23 ale  1  7  5  1 35 300 463 449 487  22 1993   0  37  38  13   0   1   2   0   0  92
Sapunaru      28 rum  1  7  3  1 39 300 318 531 369  21 1874   0  36  20   8   1   1   2   0   0 100
Demichelis    31 arg  1  7  5  1 41 300 721 679 876  25 2307   0  50  46  17   2   3   0   0   0  95
Van_Buyten    34 bel  1  7  4  4 41 300 646 179 182  21 2001   0  47  21  34   4   1   2   0   0  95
Schmelzer     24 ale  1  7  3  1 37 300 299 662 350  22 2027   0  31  15   8   0   3   4   0   0 100
Badstuber     23 ale  1  7  4  1 32 300 199 964 616  21 1984   0  29  17  10   1   2   2   0   0 100
Diekmeier     22 ale  1  6  3  1 36 300 511 582 466  10  776   0  10   1   0   0   0   0   0   0 100
Pasanen       31 fin  1  6  3  1 38 300 530 509 539  19 1703   0  23  14  19   4   1   0   0   0 100
Schweinsteiger 27 ale  1  1  9  4 38 300 580 569 940  37 2728   0   3  96  46   6   9   4   0   0  95
Gerrard       32 ing  1  3  8  4 43 300 915 737 528  29 2351   0   7  60  37   2   2  12   0   0 100
Ribery        29 fra  1  1  8  7 39 300 422 379 726  31 2343   0   3  68  80  12   5   6   0   0  95
Zapater       27 esp  1  4  6  3 40 300 712 695 525  21 1406   0   8  35  20   1   1   2   0   0 100
Marco_Reus    23 ale  1  1  7  5 34 300 414 770 784  19 1517   0   3  45  37   4   3  10   0   0 100
Tymoshchuk    33 ucr  1  6  7  1 40 300  95 547 633  22 1887   0  13  50   7   0   4   0   0   0  90
Kroos         22 ale  1  1  7  3 35 300 358 677 751  23 1789   0   2  49  24   2   4   0   0   0 100
Pedersen      31 nor  1  3  7  5 37 300 523 159 552  24 1475   0   9  46  30   3   4   4   0   0 100
Kehl          32 ale  1  3  6  1 41 300 749 702 343   6  496   0   2   4   2   0   0   2   0   0 100
Klose         34 ale  1  1  4  6 38 300 356 421 705   4  380   0   0   1  11   1   0   0   0   0 100
Podolski      27 ale  1  1  5  9 33 300 615 940  12  37 2777   0   5  22 149  19   2   0   0   0  96
Muller        22 ale  1  1  6  7 39 300 564 158 815  36  890   0   0  15  56   8   1   0   0   0 100
Mario_Gomez   26 ale  1  1  3  9 39 300 668 940 738  38 2788   0   3   9 162  16   2   0   0   0  95
Ivica_Olic    32 cro  1  1  4  7 41 300 654 184 909  36 1083   0   3   8  68   4   1   4   0   0 100
Pero como veis, en la linea que he marcado de rojo, se sale del rango [14,16] que es el que he utilizado para los demás. ¿Alguna solución?


Ahora probare a hacerlo con el split que me has dicho Fuzzylog, lo malo, es que para este caso me puede venir bien ya que es justo el número de detras del espacio, pero, ¿y si quisiese coger un numero que tiene varios espacios antes que el?
  #5 (permalink)  
Antiguo 10/04/2013, 01:38
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 15 años, 8 meses
Puntos: 188
Respuesta: Lectura ficheros de texto (Basica)

Igual podrías usar esta clase

http://www.sc.ehu.es/sbweb/fisica/cu...gtokenizer.htm

Dado que vienen todos los registros utilizarías el separador " " del stringtokenizer.

La idea sería crear un ArrayList<String> para cada registro. E ir metiendo los tokens dentro de este ArrayList. Por favor comprueba si te incluye cadenas vacias en el listado porque no sé como se comporta si existe más de un elemento separador. Si lo hace tendrías que añadir la comprobación de que lo que se va a añadir no sea una cadena vacía.

Como todas las lineas tienen los mismos resultados, te quedarían ArrayList del mismo tamaño, y con eso podrías acceder a lo que necesites. Si sabes que es un número lo casteas y arreglado.
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}

Etiquetas: ficheros, lectura, programa, string
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:32.