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

Parsear y escribir un texto predefinido.

Estas en el tema de Parsear y escribir un texto predefinido. en el foro de Java en Foros del Web. Hola, muy buenos días, tengo un problema con una aplicación (que raro xD). Tengo que leer un fichero TXT que contiene más o menos esta ...
  #1 (permalink)  
Antiguo 26/05/2009, 02:38
 
Fecha de Ingreso: junio-2008
Ubicación: Madrid
Mensajes: 73
Antigüedad: 15 años, 11 meses
Puntos: 1
Parsear y escribir un texto predefinido.

Hola, muy buenos días, tengo un problema con una aplicación (que raro xD).
Tengo que leer un fichero TXT que contiene más o menos esta estructura:
Código:
texto_sin_importancia
texto_sin_importancia
texto_sin_importancia
texto_sin_importancia
1) texto_importante
    texto_importante
    texto_importante
    texto_importante
    texto_importante
2) texto_importante
    texto_importante
    texto_importante
    texto_importante
Y lo que he realizado es la siguiente función, cuya misión es leer de dicho fichero el texto hasta que encuentre el texto "<numero>)", entonces acumular el siguiente texto hasta el siguiente código "<numero>)" en un StringBuffer y despues añadir dicho StringBuffer a una lista.

Mejor les pongo el código:
Código PHP:
public void interpretarResultados(File _fichero){
  if (
_fichero.exists()){
    try{
    
// Variables necesarias
        
BufferedReader br = new BufferedReader(new FileReader(_fichero));
    
String cadena "";
    
StringBuffer cadAux null
    List 
listaTexto = new ArrayList();
    
int i 1;
    
     
// Leo el fichero línea a línea 
     
while ((cadena br.readLine()) != null){
         
// Si encuentro una línea que contenga el código
      
if (cadena.contains(i+") ")){
            
// Si no es el primero, entonces cadAux debe tener contenido,
            // en tal caso lo inserto en la lista
        
if ((cadAux != null)&&(cadAux.toString().equals("") != false))
          
listaTexto.add(cadAux.toString());
            
// En cualquier caso, cadAux es un nuevo StringBuffer al que le añado
            // la cadena actual   
        
cadAux = new StringBuffer();
        
cadAux.append(cadena);
        
i++; //incremento i
      
}
          
// Sino contiene el código, pero cadAux no es null y no esta vacio
          // entonces estoy en el texto importante y lo añado a cadAux
      
else if ((cadAux != null)&&(cadAux.toString().contentEquals("") == false))
        
cadAux.append(cadena);
    }
    
        
// Aqui muestro el texto contenido en cada elemento de la lista
    
for (Iterator j listaTexto.iterator(); j.hasNext(); ){
      
String texto = (String) j.next();
      
System.out.println(texto);
    }
                
     }catch(
IOException a){
    
a.printStackTrace();
     }        
   }
//fi _fichero.exists()


Última edición por Wolfchamane; 26/05/2009 a las 03:53
  #2 (permalink)  
Antiguo 26/05/2009, 02:48
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: Parsear y escribir un texto predefinido.

Y la pregunta es.... ¿?¿?¿?
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #3 (permalink)  
Antiguo 26/05/2009, 03:12
 
Fecha de Ingreso: junio-2008
Ubicación: Madrid
Mensajes: 73
Antigüedad: 15 años, 11 meses
Puntos: 1
Respuesta: Parsear y escribir un texto predefinido.

Cita:
Iniciado por GreenEyed Ver Mensaje
Y la pregunta es.... ¿?¿?¿?
Cierto, se me olvido ponerlo.
La pregunta es: ¿Por qué no escribe nada por pantalla?
  #4 (permalink)  
Antiguo 26/05/2009, 04:27
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: Parsear y escribir un texto predefinido.

Prueba a averiguarlo con el debugger o poniendo trazas en los puntos adecuados. Además, aprenderás mucho más sobre como funciona tu programa que si lo hacemos nosotros.

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #5 (permalink)  
Antiguo 26/05/2009, 04:30
 
Fecha de Ingreso: junio-2008
Ubicación: Madrid
Mensajes: 73
Antigüedad: 15 años, 11 meses
Puntos: 1
Respuesta: Parsear y escribir un texto predefinido.

Cita:
Iniciado por GreenEyed Ver Mensaje
Prueba a averiguarlo con el debugger o poniendo trazas en los puntos adecuados. Además, aprenderás mucho más sobre como funciona tu programa que si lo hacemos nosotros.
/ironic mode: ON
¡¡Claro, cómo no se me había ocurrido debuggear!!
Si es que cabeza la mia, no sé porque he estudiado cuando el debugger soluciona todos los problemas.
/ironic mode: Off

¿Alguna respuesta menos trivial?
Gracias.

PD: Perdón si al ser sarcástico ofendo a alguien.
  #6 (permalink)  
Antiguo 26/05/2009, 04:35
Avatar de elAntonie  
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 3 meses
Puntos: 10
Respuesta: Parsear y escribir un texto predefinido.

Wenas.

Pues sarcasmos y modeironics a parte, me parece lo primero que tendrias que hacer.

Has comprobado si entra en el while?? o entra por el primer if y por el segundo?? porque es ahi donde parece que (solamente) llenas la lista que luego sacas por pantalla.

Vamos que si no pasas por ahi, poco vas a mostrar.

Saludos.
  #7 (permalink)  
Antiguo 26/05/2009, 04:43
 
Fecha de Ingreso: junio-2008
Ubicación: Madrid
Mensajes: 73
Antigüedad: 15 años, 11 meses
Puntos: 1
Respuesta: Parsear y escribir un texto predefinido.

Cita:
Iniciado por elAntonie Ver Mensaje
Wenas.

Pues sarcasmos y modeironics a parte, me parece lo primero que tendrias que hacer.

Has comprobado si entra en el while?? o entra por el primer if y por el segundo?? porque es ahi donde parece que (solamente) llenas la lista que luego sacas por pantalla.

Vamos que si no pasas por ahi, poco vas a mostrar.

Saludos.
Ya he trackeado y debuggeado un rato.
He añadido algunos System.out.println() a ver dónde estaba el fallo, he aqui el código con las trazas:
Código:
public void interpretarResultados(File _fichero){
		
		//TODO
		
		if (_fichero.exists()){
			
			try{
				
				BufferedReader br = new BufferedReader(new FileReader(_fichero));
				String cadena = "";
				StringBuffer cadAux = null; 
				List listaTexto = new ArrayList();
				int i = 1;
				
				while ((cadena = br.readLine()) != null){
					System.out.println("[TRAZA]: Leo una línea");
					if (cadena.contains(i+") ")){
						System.out.println("[TRAZA]: La línea tiene el código");
						if (cadAux != null){
							System.out.println("[TRAZA]: La cadena auxiliar no esta nula");
							if (cadAux.toString().equals("") != false){
								System.out.println("[TRAZA]: Ya tenía parte del código guardado, lo meto en la lista");
								listaTexto.add(cadAux.toString());
							}
						}
						else
							System.out.println("[TRAZA]: La cadena auxiliar esta nula");
						cadAux = new StringBuffer();
						cadAux.append(cadena);
						i++;
						System.out.println("[TRAZA]: Creo un StringBuffer nuevo para guardar el texto");
					}
					else if ((cadAux != null)&&(cadAux.toString().contentEquals("") == false)){
						cadAux.append(cadena);
						System.out.println("[TRAZA]: El texto leido esta en la parte impotante");
					}
					else
						System.out.println("[TRAZA]: La línea no tiene el código");
				}
				
				i = 0;
				for (Iterator j = listaTexto.iterator(); j.hasNext(); ){
					String texto = (String) j.next();
					System.out.println(texto);
					i++;
				}
				
			}catch(IOException a){
				System.out.println("ERROR: VentanaInicio.interpretarRestultados()\n"+a.getMessage());
			}
			
		}
Y la salida sigue siendo ninguna.

Última edición por Wolfchamane; 26/05/2009 a las 04:54
  #8 (permalink)  
Antiguo 26/05/2009, 05:21
Avatar de elAntonie  
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 3 meses
Puntos: 10
Respuesta: Parsear y escribir un texto predefinido.

Y en las trazas que tienes??
  #9 (permalink)  
Antiguo 26/05/2009, 06:36
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: Parsear y escribir un texto predefinido.

Cita:
Iniciado por Wolfchamane Ver Mensaje
/ironic mode: ON
¡¡Claro, cómo no se me había ocurrido debuggear!!
Si es que cabeza la mia, no sé porque he estudiado cuando el debugger soluciona todos los problemas.
/ironic mode: Off

¿Alguna respuesta menos trivial?
Gracias.

PD: Perdón si al ser sarcástico ofendo a alguien.
Sin ironías, ¿como se supone que tenemos que saber nosotros si lo has hecho o no si no lo mencionas en ningún lado? ¿Telepatía?
Y en caso de que lo hayas hecho... ¿como sabemos que pruebas has hecho para no repetir las mismas? ¿Tenemos que empezar desde cero por que te da pereza a tí explicarte mejor en tu mensaje?
Pero no pasa nada, como veo que te ofende que digan que no esta nada clara tu pregunta, no te ofenderé más.

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #10 (permalink)  
Antiguo 26/05/2009, 07:15
 
Fecha de Ingreso: junio-2008
Ubicación: Madrid
Mensajes: 73
Antigüedad: 15 años, 11 meses
Puntos: 1
Respuesta: Parsear y escribir un texto predefinido.

Solucionado.
Cambiando un poco la estructura del algoritmo funciona perfectamente.

Y para la próxima ... intentaré explicarme todo lo profundo que pueda.
  #11 (permalink)  
Antiguo 26/05/2009, 09:10
Avatar de drac94  
Fecha de Ingreso: mayo-2008
Ubicación: México
Mensajes: 383
Antigüedad: 16 años
Puntos: 5
Respuesta: Parsear y escribir un texto predefinido.

tiene razon GreenEyed, como vamos a saber eso nosotros?
deberias darle una checada al link que tiene en su firma para que para la otra hagas una pregunta inteligente
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 19:01.