Java - mostrar lineas en java

 
Vista:

mostrar lineas en java

Publicado por juan david (14 intervenciones) el 07/03/2006 21:43:17
hola como estan todos:

Es que tengo el siguiente problemilla, estoy leyendo un archivo de texto y buscando un patron determinado, cuando lo encuentro me imprime toda la linea y el numero de linea donde se encontro, estoy utilizando las clases, file, stringtokenizer, etc.. pero ademas de imprimir esa linea deseo tambien imprimir las 2 lineas anteriores a las del patron. se que es que con un ciclo pero no he podido hacerlo, si alguien podria decirme estaré muy agradecido.

String linea, Token;
StringTokenizer tk;
linea=entrada.readLine();
numlinea=1;
while((linea=entrada.readLine())!= null) {
numlinea++;
tk=new StringTokenizer(linea);
while(tk.hasMoreTokens()){
Token = tk.nextToken();
if(Token.equals("ANOMALIA")){
System.out.println(linea + " Linea Numero " + numlinea);

deseo impromir unas cuantas lineas atras.
gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

RE:mostrar lineas en java

Publicado por chuidiang (950 intervenciones) el 08/03/2006 08:48:13
Hola:

Tienes que guardar las tres últimas líneas para escribirlas. Una forma cómoda de hacerlo puede ser en una lista. Algo como esto

LinkedList lista = new LinkedList()

while(...)
leelinea();
lista.add(linea); // La linea nueva se añade al final de la lista
si linea pasa patron, escribir las lineas de la lista
si no pasa patron y la lista tiene 3 elementos o más, borrar el primero (indice cero).
otra vuelta de bucle.

Se bueno.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:mostrar lineas en java

Publicado por juan david (14 intervenciones) el 08/03/2006 14:50:27
gracias viejo pero soy novado, podria ser mas explicito
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:mostrar lineas en java

Publicado por juan david (14 intervenciones) el 08/03/2006 15:01:36
lo que ocurre es que cuando se adicona la lista le digo que me imprima el resultado de las lineas y me muestra true y el numero de lineas otra ves, no la linea que yo necesito, la linea como tal.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:mostrar lineas en java

Publicado por chuidiang (950 intervenciones) el 09/03/2006 21:58:25
Hola:

Como lista para guardar las lineas puedes usar LinkedList

LinkedList lista = new LinkedList();

Añades las lineas ahi y borras la primera si hay mas de tres

lees linea
lista.add (linea);
if (lista.size() > 3)
lista.remove(0);
compruebas condicion para imprimir

Luego, cuando llegue el momento de imprimir, escribes las tres lineas

for (int i=0;i<lista.size();i++)
System.out.println (lista.get(i));

Puede que los nombres de los métodos no sean correctos (quizás en vez de add() es addElement() o cosas asi), pero supongo que se entiende.

Se bueno.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:mostrar lineas en java

Publicado por juan david (14 intervenciones) el 10/03/2006 14:43:01
hola::
muchas gracias por tu ayuda funcionó perfectamente, pero mi problema es el siguiente, como el archivo de texto que tengo que leer es demasiado grande, debo encontrar la cadena es este caso "ANOMALIA", la cual aparece muchas veces, como una clase de patron, cuando hice lo que me digiste, solo alcanza analizar la primera primera palabra en contrada, y no me lee las siguientes lineas ya que se desborda la memoria mira este codigo por favor:

FileInputStream fr = new FileInputStream(archivos[i]);
DataInputStream entrada = new DataInputStream(fr);
String linea, Token;
StringTokenizer tk;

//linea=entrada.readLine();
numlinea=1;

while((linea=entrada.readLine())!= null) {
lista.add(linea);
// lista.add(numlinea);
// v.addElement(linea);
numlinea++;



// while((linea=entrada.readLine())!= null) {

int indice = 0;
while(indice<numlinea-1)
{

linea=(String)lista.get(indice);
tk=new StringTokenizer(linea);
while(tk.hasMoreTokens()){
Token = tk.nextToken();

//if(Token.equals("113:") || Token.equals("115:") || Token.equals("116:")){

if(lista.size()>3 && Token.equals("ANOMALIA:")){
lista.remove();

//while(Token.equals("113:")){
System.out.println(linea + " Linea Numero " + numlinea);


for (int n = 0; n<=lista.size(); n++)
System.out.println(lista.get(n) + " Linea Numero " + numlinea);


//for(int j = 0; j<=numlinea--; j++)
// System.out.println(linea + " Linea Numero " + numlinea);

// fin if(token.equals)
}

//fin fin while hasmore
}
//fin while readline
}
}
// fin try
}

he intentado hacerlo con vectores tambien pero no lo he logrado, voy leyendo el archivo
y lo adiciono cada linea a la lista, posteriormente separo por tokens y comparo si encuentra la palabra clave "ANOMALIA", si la encuentro debo imprimir esa linea y dos o tres lineas mas arriba o hacia abajo del archivo, teniendo en cuenta la lista claro lo he intentado de muchas formas y no lo he logrado. Por favor quisiera que me brindaras mas ayuda. Muchas gracias por su atencion.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar