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

Buen Dia, una duda sobre manejo de un archivo.

Estas en el tema de Buen Dia, una duda sobre manejo de un archivo. en el foro de Java en Foros del Web. Muchas Gracias por entrar al post. Mi duda es la siguiente: Estoy leyendo de un txt un archivo que tiene un formato asi: 17 3 ...
  #1 (permalink)  
Antiguo 05/12/2009, 20:17
 
Fecha de Ingreso: mayo-2009
Mensajes: 46
Antigüedad: 15 años
Puntos: 0
Buen Dia, una duda sobre manejo de un archivo.

Muchas Gracias por entrar al post.

Mi duda es la siguiente:

Estoy leyendo de un txt un archivo que tiene un formato asi:

17 3 //esto lo puedo leer
1 0 4 // de aqui en adelante se supone que no se cuantas lineas van a aparecer ni de que cantidad van a hacer, pero eso lo puedo hacer
2 0 4 5
3 2 5
4 0 3
5 0 2
1 0 //de esta ultima linea voy a sacar como comparar los numeros

lo que hago es leo la cadena y con tokenizer la separo...

pero la desecho...(desecho la lista, osea comparo la lista y sigo adelante, pero los valores cambian y por lo tanto es necesario volver a leer la cadena y eso ya no se como hacerlo, puesto que no se cuantas lineas vendran ni su longitud.)

lo que necesito es volver a leer el archivo y ahi ya no se como hacerlo.... o guardar la cadena en listas pero luego no se como acceder a ella, volver a leer de ella :S

Espero poder haber sido claro..Gracias
  #2 (permalink)  
Antiguo 05/12/2009, 20:45
 
Fecha de Ingreso: octubre-2004
Mensajes: 79
Antigüedad: 19 años, 6 meses
Puntos: 0
Respuesta: Buen Dia, una duda sobre manejo de un archivo.

StringTokenizer st = new StringTokenizer(palabra);
int cant=st.countTokens();
asi lees y sabes cuantas palabras tiene tu cadena

y con una expresion regular reemplazas por ejemplo
cuando encuentres un retorno de carrro

texto.replacefirst("\\n","");
y cuentas asi encontrarás la cantidad de lineas


saludos
  #3 (permalink)  
Antiguo 05/12/2009, 21:03
 
Fecha de Ingreso: mayo-2009
Mensajes: 46
Antigüedad: 15 años
Puntos: 0
Respuesta: Buen Dia, una duda sobre manejo de un archivo.

Cita:
Iniciado por Asezin0 Ver Mensaje
StringTokenizer st = new StringTokenizer(palabra);
int cant=st.countTokens();
asi lees y sabes cuantas palabras tiene tu cadena

y con una expresion regular reemplazas por ejemplo
cuando encuentres un retorno de carrro

texto.replacefirst("\\n","");
y cuentas asi encontrarás la cantidad de lineas


saludos
muchas gracias por la pronta respuesta, mira mas especifico..esto es mi archivo de entrada..

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

y puedo leer pero por ej. ahi dice 2 5 ..osea tengo k buscar donde sea 2 5 e imprimir los numeros que sigan y volver a buscar ahora segun los numeros y el 5, Ej: en 2 5 esta el 1 9 ahora tengo k buscar 1 5 e 9 5 e imprimir los numeros k existan.

imprimo los numeros con un for...pero no se como regresarme (regresarme es volver a buscar desde arriba)por ejemplo ahi me salio un 1..no se como regresarme :S ni como buscar en las 2 variables

saludos y muchas gracias
  #4 (permalink)  
Antiguo 05/12/2009, 21:30
 
Fecha de Ingreso: octubre-2004
Mensajes: 79
Antigüedad: 19 años, 6 meses
Puntos: 0
Respuesta: Buen Dia, una duda sobre manejo de un archivo.

mira, si es lo que pienso es un tema un poco complejo que tenemos que discutir y estoy dispuesto a ayudarte, porque me interesó el tema y escapa de la programacion ordinaria...te felicito por eso

pero antes necesito que seas bien claro en lo que deseas... una breve explicacion de lo que necesitas.

Saludos
  #5 (permalink)  
Antiguo 05/12/2009, 21:50
 
Fecha de Ingreso: mayo-2009
Mensajes: 46
Antigüedad: 15 años
Puntos: 0
Respuesta: Buen Dia, una duda sobre manejo de un archivo.

Cita:
Iniciado por Asezin0 Ver Mensaje
mira, si es lo que pienso es un tema un poco complejo que tenemos que discutir y estoy dispuesto a ayudarte, porque me interesó el tema y escapa de la programacion ordinaria...te felicito por eso

pero antes necesito que seas bien claro en lo que deseas... una breve explicacion de lo que necesitas.

Saludos
muchas gracias por responder de nuevo

te anexo algo del codigo que tengo
Código PHP:
public class web {
    
    
/** Creates a new instance of Main */
     
    /**
     * @param args the command line arguments
     */
    
public static void main(String[] argsthrows FileNotFoundException {
        
int contador;
        
ArrayList<Integerlista = new ArrayList<Integer>();
        
Scanner scn = new Scanner(new File("in.txt"));
        try {
        
PrintWriter fileOut = new PrintWriter(new FileWriter("out.txt"));
        
int ciudadabuscar scn.nextInt();
        
int aerolinea scn.nextInt();
        
int bandera=0;
        while (
scn.hasNextLine()){
                
String cad scn.nextLine();
                
StringTokenizer st = new StringTokenizer(cad," ");
         while (
st.hasMoreTokens())
         {
                
String t st.nextToken(); 
                
lista.add Integer.parseInt(t) );
         }
           
int a[]= new int[lista.size()];
           for (
int x=0x<lista.size(); x++)
                        {
                        
a[x] = lista.get(x);
                        }
                      for (
int x=0x<lista.size(); x++)
                        {
               for (
x=1;x<lista.size();x++){
                        if (
ciudadabuscar == a[0] && aerolinea == a[1])//tenia x=1
                
{
                            for (
x=2;x<lista.size();x++)
                            { 
fileOut.printf("%d ",a[x]);
                              
ciudadabuscara[2];
                              
bandera 1;}
                }
               }
                         }
                     
lista.clear();
        }
        if(
bandera==0){
        
fileOut.println("No hay destinos posibles por esta línea");
        }
        
fileOut.close();
        }catch(
FileNotFoundException ex){}catch(IOException ex){}
        }

brevemente se puede observa que actualizo ciudad a buscar...y es ahi donde falta algo de programacion..aunado al hecho que hago lista.clear...limpio lo valores que ya lei de la lista... tengo k utilizar otra forma de leer los archivos

asi estaria el archivo de texto de entrada:
2 5
0 9 2 3 4
1 2 3 9
1 5 4
2 0 0 5 6
2 5 1 9
4 6 1 5
4 9 1 8
9 1 4 8
9 5 0

y la salida seria:

1 9 4 0

mucha gracias por el interes
  #6 (permalink)  
Antiguo 05/12/2009, 22:00
 
Fecha de Ingreso: octubre-2004
Mensajes: 79
Antigüedad: 19 años, 6 meses
Puntos: 0
Respuesta: Buen Dia, una duda sobre manejo de un archivo.

iap mira...
ahora entendi lo que quieres..pero lo que tienes en codigo solo realiza un solo recorrido.
primero que todo lleva los lista.size() a lista.size()-1 o en el caso de x=2 a lista.size()-2...... con eso evitas pasarte y k te envie una excepcion de index


te aconsejo que para leer el archivo utilices un while asi vuelve del comienzo y parte del 2do caracter a medida que avanza tu for que recorre la lista
y el while itera el largo de tu archivo con todos los numero o pares de numeros.

Me entiendes? si es asi pasamos al siguiente lio si esque existe

Saludos
  #7 (permalink)  
Antiguo 05/12/2009, 22:16
 
Fecha de Ingreso: mayo-2009
Mensajes: 46
Antigüedad: 15 años
Puntos: 0
Respuesta: Buen Dia, una duda sobre manejo de un archivo.

Cita:
Iniciado por Asezin0 Ver Mensaje
iap mira...
ahora entendi lo que quieres..pero lo que tienes en codigo solo realiza un solo recorrido.
primero que todo lleva los lista.size() a lista.size()-1 o en el caso de x=2 a lista.size()-2...... con eso evitas pasarte y k te envie una excepcion de index


te aconsejo que para leer el archivo utilices un while asi vuelve del comienzo y parte del 2do caracter a medida que avanza tu for que recorre la lista
y el while itera el largo de tu archivo con todos los numero o pares de numeros.

Me entiendes? si es asi pasamos al siguiente lio si esque existe

Saludos
muchas gracias por seguir,

asi es ... solo realiza un recorrido, y no me manda ninguna excepción de index pero lo tendre en cuenta el de poner -1

y lo de poner otro while, cual seria la condición?? se me ocurre que fuera hasta que no se modificara ciudadabuscar que seria cuando no se actualizara.

pero como estoy leyendo de un archivo, tendria que volverlo a leer, porque estoy leyendo hasta que no encuentre linea y trabajando en una vuelta y eliminando con lista.clear,lo k estoy leyendo...

y tendria que volver a iterar, pero como le voy a dar a enteder que empieze ahora a partir del segundo caracter, espero poder darme a entender.

de antemano gracias
  #8 (permalink)  
Antiguo 05/12/2009, 22:20
 
Fecha de Ingreso: octubre-2004
Mensajes: 79
Antigüedad: 19 años, 6 meses
Puntos: 0
Respuesta: Buen Dia, una duda sobre manejo de un archivo.

de la siguiente manera...
tomas el largo de tu archivo
y el while lo pones de la siguiente manera


x=cadena.length() ----> en el caso de k el contenido de tu archivo lo metas en una cadena.

y el while de la siguiente manera
while(a<=x){
a=a+1;
}
  #9 (permalink)  
Antiguo 05/12/2009, 22:51
 
Fecha de Ingreso: mayo-2009
Mensajes: 46
Antigüedad: 15 años
Puntos: 0
Respuesta: Buen Dia, una duda sobre manejo de un archivo.

Cita:
Iniciado por Asezin0 Ver Mensaje
de la siguiente manera...
tomas el largo de tu archivo
y el while lo pones de la siguiente manera


x=cadena.length() ----> en el caso de k el contenido de tu archivo lo metas en una cadena.

y el while de la siguiente manera
while(a<=x){
a=a+1;
}
me aparecia que se habia caido el foro............

no se donde tomar el largo del archivo solo se me ocurre meter un contador en
Código PHP:
while (scn.hasNextLine()){
                
String cad scn.nextLine();
                
StringTokenizer st = new StringTokenizer(cad," ");
                
contadoor++;<<<<<<<<AQUI para leer el largo del archivo
         
while (st.hasMoreTokens()) 
y seria while(a<=contadoor)
a=a+1;

pero como inicializo a.....

Código PHP:
        int aa=0;// si lo inicialo en 0 nunca termina.....
        
while(aa <= contadoor){//lo acabo deponer
            
aa=aa+1;
        while (
scn.hasNextLine()){
                
String cad scn.nextLine();
                
StringTokenizer st = new StringTokenizer(cad," ");
                
contadoor++; 
saludos y muchas gracias por el tiempo
  #10 (permalink)  
Antiguo 05/12/2009, 23:06
 
Fecha de Ingreso: octubre-2004
Mensajes: 79
Antigüedad: 19 años, 6 meses
Puntos: 0
Respuesta: Buen Dia, una duda sobre manejo de un archivo.

asumo que cad es tu cadena no?
de ahi puedes obtener el largo
y a lo tienes que inicializar fuera del while que incluiras
y sumarle 1 antes de cerrarlo

y cuentame como funcionó
  #11 (permalink)  
Antiguo 05/12/2009, 23:15
 
Fecha de Ingreso: mayo-2009
Mensajes: 46
Antigüedad: 15 años
Puntos: 0
Respuesta: Buen Dia, una duda sobre manejo de un archivo.

Cita:
Iniciado por Asezin0 Ver Mensaje
asumo que cad es tu cadena no?
de ahi puedes obtener el largo
y a lo tienes que inicializar fuera del while que incluiras
y sumarle 1 antes de cerrarlo

y cuentame como funcionó
muchas gracias..

cad es la longitud de la cadena de la linea por eso le paso el tokenizer para separar el string donde haya espacio

por eso era la idea del contador....para ver cuantas lineas hay...pero como le hare para regresarme a esa posición del archivo..


osea solo busco si hay nextLine si hay pues la analizo..para eso la idea del contador..... pero luego como voy a referenciar ..espero expresarme bien

de antemano gracias

Última edición por Fabj21; 05/12/2009 a las 23:22
  #12 (permalink)  
Antiguo 05/12/2009, 23:35
 
Fecha de Ingreso: octubre-2004
Mensajes: 79
Antigüedad: 19 años, 6 meses
Puntos: 0
Respuesta: Buen Dia, una duda sobre manejo de un archivo.

mira para facilitar el asunto y no dar tantas vueltas te aconsejo lo siguiente..

lees tu archivo y el contenido lo pones todo en una cadena.
luego para formar los bloques de numero haces desaparecer la nueva linea de la siguiente manera.
texto=texto.replaceall("\\n"," ");
con eso formas una sola linea reemplazando los retorno de carro por espacio en blanco
texto=texto.trim(); quitas los espacios en blanco del comienzo y del final. asi haces utilizable la posicion 0
despues tomas el largo de texto largo=texto.length;
y recorres con el while que te comente antes
int a=0;
while(a<=largo){
tus sentencias
a=a+1;
}
con eso recorres el archivo tantas veces como caracteres tenga
asi puedes comprobar 1 a 1
  #13 (permalink)  
Antiguo 07/12/2009, 09:01
 
Fecha de Ingreso: mayo-2009
Mensajes: 46
Antigüedad: 15 años
Puntos: 0
Respuesta: Buen Dia, una duda sobre manejo de un archivo.

Cita:
Iniciado por Asezin0 Ver Mensaje
mira para facilitar el asunto y no dar tantas vueltas te aconsejo lo siguiente..

lees tu archivo y el contenido lo pones todo en una cadena.
luego para formar los bloques de numero haces desaparecer la nueva linea de la siguiente manera.
texto=texto.replaceall("\\n"," ");
con eso formas una sola linea reemplazando los retorno de carro por espacio en blanco
texto=texto.trim(); quitas los espacios en blanco del comienzo y del final. asi haces utilizable la posicion 0
despues tomas el largo de texto largo=texto.length;
y recorres con el while que te comente antes
int a=0;
while(a<=largo){
tus sentencias
a=a+1;
}
con eso recorres el archivo tantas veces como caracteres tenga
asi puedes comprobar 1 a 1

pero creo k estoy complicando mas el asunto...

porque ahora tendre todo en una linea 09234 1239 154
20056 2519 4615 4918 9148 950 y necesito comparar el primer numero y el segundo numero para ver si utilizare los demas...y yo tendre una cadena :S

de antemano gracias
  #14 (permalink)  
Antiguo 07/12/2009, 10:21
 
Fecha de Ingreso: octubre-2004
Mensajes: 79
Antigüedad: 19 años, 6 meses
Puntos: 0
Respuesta: Buen Dia, una duda sobre manejo de un archivo.

pero asi lo metes por bloques en un array
y comparas en cada bloque
^^
  #15 (permalink)  
Antiguo 11/12/2009, 16:29
 
Fecha de Ingreso: mayo-2009
Mensajes: 46
Antigüedad: 15 años
Puntos: 0
Respuesta: Buen Dia, una duda sobre manejo de un archivo.

tendre k investigar como comparar por bloques...porque solo me interesaria

por ejemplo

25 09234 1239 154 20056 2519 4615 4918 9148 950

buscar el 25 en cada bloque 2 primeros lugar de cada bloque..luego 15 en cada inicio de bloque ..luego 95... luego 45..luego 05....sin mencionar que estoy imprimiendo los numeros qu e siguen..despues del 25...15...95

saludos y gracias
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 18:30.