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

ficheros

Estas en el tema de ficheros en el foro de Java en Foros del Web. Tengo este Código: Código: package ejercicio4ficheros; import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; /** * * @author pc1 */ public class ejercicio4clase ...
  #1 (permalink)  
Antiguo 21/11/2008, 06:33
 
Fecha de Ingreso: abril-2007
Mensajes: 166
Antigüedad: 17 años, 1 mes
Puntos: 2
ficheros

Tengo este Código:

Código:
package ejercicio4ficheros;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

/**
 *
 * @author pc1
 */
public class ejercicio4clase 
{
     
    public void comparar(String origen,String destino)throws IOException
    {
        int i;
        String almacena;
        File archivo_a_abrir = null; 
        File archivo_destino=null;
        FileReader frarchivo1 = null;
        FileReader frarchivo2=null;
        String linea,linea2=null;

        try {
                archivo_a_abrir = new File (origen);
                archivo_destino=new File (destino);

                frarchivo1 = new FileReader (archivo_a_abrir);
                BufferedReader br2 = new BufferedReader(frarchivo1);

                frarchivo2=new FileReader (archivo_destino);
                BufferedReader br3 = new BufferedReader(frarchivo2);

                int contlineas=0;

                //te recorre las lineas y va comparando que sean iguales o no y además si 
                //son de distinto tamaño.
                //NOS HACE ESTO SOBRE LAS LINEAS DE UN ARCHIVO.
                //LEYENDO POR COLUMNAS O POR CARACTER
                while((linea=br2.readLine())!=null &&(linea2=br3.readLine())!=null)
                {   
                    contlineas++;
                   if(linea.equals(linea2)) //para ver si son iguales los ficheros.
                   {
                       System.out.println("Las lineas de los ficheros son iguales");
                   }
                   if(!linea.equals(linea2));
                   {
                      for (i=0;i<linea.length()&&i<linea2.length();i++)
                      {
                          if(linea.charAt(i)!=linea2.charAt(i))
                            System.out.println("Error, linea: "+contlineas+" columna: "+i+1); 
                      }
                      if(i<linea.length()) //linea > linea2
                      {
                          System.out.println("El primer es mayor en CARACTERES que el segundo");
                      }  
                      if(i<linea2.length())  //linea2>linea
                      {
                          System.out.println("El segundo es mayor en CARACTERES que el primero.");
                      }
                   }
              
                }

                //Comprueba que el fichero sea de igual tamaño o no.
                //LEYENDO POR FILAS O LINEAS
                if(linea!=null)
                {
                    System.out.println("Error en el fichero 1" + linea);
                    while((linea=br2.readLine())!=null)
                        System.out.println("error fichero 1 " + linea);
                }
                    
                if(linea2!=null)
                {    
                    System.out.println("Error fichero 2" +linea2);
                    while((linea2=br3.readLine())!=null)
                        System.out.println("Error fichero 2" +linea2);
                }
                    frarchivo2.close();
                  frarchivo1.close();
        }
        catch(FileNotFoundException error)
        {
            System.out.println("Alguno de los 2 ficheros no existen.");
        }
        catch(IOException error2)
        {
            System.out.println("Error en E/S del HD");
        }        
    }
}
Tengo que hacer un ejercicio que haga lo siguiente:

Escribir un programa que compare dos archivos y muestre las diferencias entre
ambos, mostrando el numero de linea y columna.


Me sale esto al ejecutar el programa en NETBEAN 6.1 :

init:
deps-jar:
Compiling 1 source file to C:\Documents and Settings\pc1\Mis documentos\NetBeansProjects\ejercicio4ficheros\bui ld\classes
compile:
run:
Escriba el nombre del fichero origen:
c:\fich1.txt
Escribe el destino:
c:\fich2.txt
El segundo es mayor en CARACTERES que el primero.
Error, linea: 2 columna: 01
Error, linea: 2 columna: 11
Error, linea: 2 columna: 21
El segundo es mayor en CARACTERES que el primero.
Error en el fichero 1 :3332 (esto se supone que son las lineas, pero 3332 no es la linea 3332 , si no que hay una diferencia de caracteres 3332 en la linea 3 (ver el fichero 2)
BUILD SUCCESSFUL (total time: 10 seconds)


Este es el contenido de los ficheros.

-----fich1.txt------
hola
222
3332

----fich2.txt------
hola 2223332
hola 2223332

El segundo es mayor en caracteres que el primero. Pero lo que no comprendo por que sale lo de Error, linea: 2 columna 21 ( y así con la 01 y 11). y lo de Error en el fichero 1 : 3332

Ayudadme llevo 3 días con el mismo ejercicio.
  #2 (permalink)  
Antiguo 24/11/2008, 01:32
 
Fecha de Ingreso: abril-2007
Mensajes: 166
Antigüedad: 17 años, 1 mes
Puntos: 2
Respuesta: ficheros

Gracias por contestar. ¿Se nota la ironía? ¬¬
  #3 (permalink)  
Antiguo 24/11/2008, 01:46
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: ficheros

Se nota, se nota. Realmente es irónico que la culpa sea "del foro" por no ayudarte por la cara a hacer tus ejercicios, con los que se supone que tienes que aprender tú.

Si tienes una duda o un problema técnico, pues te ayudaremos encantados, pero si no entiendes lo que hace tu programa, ¿realmente esperas que nosotros nos pongamos a probarlo y depurarlo para decirte que es lo que no funciona?

Creo que te iría mejor si aprendieras como funcionan los foros y para que sirven. Les podrías sacar mucho más partido.

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #4 (permalink)  
Antiguo 24/11/2008, 02:11
 
Fecha de Ingreso: abril-2007
Mensajes: 166
Antigüedad: 17 años, 1 mes
Puntos: 2
Respuesta: ficheros

Se perfectamente lo que hace mi programa , solo es que no veo el error . Si a molestado a alguien lo siento, pero es que pregunté a esto hace 3 días y todavía sigo necesitando ayuda A VER que es lo que me falla , por que no lo comprendo. No quiero que me depuren nada , solo quiero que si ven donde está el problema me lo digan y lo depuro. Por que se supone que tengo un problema técnico.

Pero weno si ha molestado a alguien pues lo siento.

PD: han leido 18 personas mi post y nadie sabia como "explicarme" por que tengo este error? (es un fallo técnico) , no lo creo.... pero weno.

Última edición por Juny18; 24/11/2008 a las 02:12 Razón: por que quiero agregar algo
  #5 (permalink)  
Antiguo 24/11/2008, 05:20
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: ficheros

Hola,
A ver, no te lo decía tampoco a mala idea y en serio que el poder sacar "jugo" a un foro es cuestión del punto de vista.
El que 18 personas hayan visto el mensaje no quiere decir nada, lo podrían ver 2 millones y no decir nadie nada, así es Internet y este es un foro donde la ayuda que te dan es "por la cara" y nadie tiene obligación de nada. A veces te hacen el favor y a veces no, pero no puedes quejarte por que no te hagan favores gratuitos. Esas 18 personas pueden saber poco Java y mirarlo por curiosidad, no tener tiempo para responder mas que a preguntas cortas... quien sabe.

En mi caso, te puedo decir que no tengo tiempo para ponerme a probar el codigo de otras personas, ya tengo mi trabajo, y si no es una pregunta corta y técnica, pues no tengo tiempo para tanto. Y cualquier mensaje que implique copiar el codigo de alguien y probarlo para ver, o leerme el codigo y compilarlo de cabeza pues lo descarto al leerlo. Si alguien tiene tiempo, perfecto, yo no, ojalá.

Y digo que no entiendes tu programa por que si preguntas "¿por que me sale esto?" es que no sabes lo que esta haciendo tu programa. Una cosa es saber lo que quieres que haga, y otra lo que él hace . Esa es la primera noción que tienes que tener clara para depurar un programa, nunca confundir "lo que quieres" con "lo que pasa".

En este caso en concreto no se lo que pasa, pero normalmente los problemas así es bueno atacarlos dejando claro lo que tendría que salir por pantalla y luego, puedes mirarlo paso a paso con un depurador si hace falta, y comprobar si hace exactamente eso. En cuanto se desvíe un milimetro de lo que tu esperas que haga, parar, mirar por que y ver donde está el problema y arreglarlo para que haga lo que quieres. Y así hasta llegar a que haga completamente lo que quieres.

Haciéndolo de golpe con el programa entero es mucho más complicado.

En cuanto a "ver donde está el problema", no es un problema técnico en cuanto que no es una Excepcion, no da error de compilación... Es una cuestión de que no hace lo que debería hacer, y eso sólo lo puedes detectar tú, que eres el que sabe que debería hacer el programa. ¿Nosotros como podemos saber lo que debería responder el programa? Sólo está la descripción del problema pero no hay nada de cual debería ser la salida.

Y no, no estoy ofendido. Simplemente intento ayudarte a entender mejor como funciona esto de los foros. Tambien puedes leer el enlace de mi firma: http://www.sindominio.net/ayuda/preg...eligentes.html (que no he escrito yo )

Suerte
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.

Última edición por GreenEyed; 25/11/2008 a las 01:45 Razón: Typos fixed :)
  #6 (permalink)  
Antiguo 24/11/2008, 17:29
 
Fecha de Ingreso: abril-2007
Mensajes: 166
Antigüedad: 17 años, 1 mes
Puntos: 2
Respuesta: ficheros

Tranquilo, no me lo he tomado a mal. Solo que estoy un poco alterada con el ejercicio. XD


Se además la salida que tiene que dar el ejercicio. Se supone que te debe mostrar un mensaje en pantalla diciendote :

-Que líneas del fichero tal (el que sea) son mayores o menores con respecto a los caracteres (columnas), además de ver en que se diferencian
-Lo mismo pero ahora con las columnas.

-Al final se muestra un mensaje diciendo que en la fila tal hay errores por que un fichero es mas grande que otro al tener mas filas o mas columnas.


Eso es lo que debería salir. El problema esta en los ultimos while (los que estan dentro de los ifs) (más concretamente creo que en los ifs) pero no se exactamente en que. Por cierto por si no lo he dicho, en ese while lo que tiene que hacer es comparar las líneas y si hay alguna diferencia en ellas (con respecto al tamaño se refiere) pues que salte un error (este error se muestra con un println y que nos pone que filas tienen error por que uno de los 2 fichero es más grande que el otro y por tanto uno termina y el otro se sigue ejecutando.)

Este ejercicio lo que hace es comparar 2 ficheros para ver si hay diferencias, esto lo comprueba mediante su tamaño. Es decir, primero comprueba el tamaño de los caracteres (columnas) y despúes el de las filas. Si uno es más grande que otro (en ambos casos) se mostrará un error diciendo cual es el mayor y en que filas o columnas se diferencia, así :

System.out.println("Error fichero 1 "+filas);

Espero haber dado los datos suficientes como para no tener ningun problema en lo que tiene que dar en la salida del programilla y además en el error que tengo.

Venga gracias de antemano.
  #7 (permalink)  
Antiguo 25/11/2008, 01:57
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: ficheros

Cita:
Iniciado por Juny18 Ver Mensaje
Se además la salida que tiene que dar el ejercicio. Se supone que te debe mostrar un mensaje en pantalla diciendote :
-Que líneas del fichero tal (el que sea) son mayores o menores con respecto a los caracteres (columnas), además de ver en que se diferencian
-Lo mismo pero ahora con las columnas.
-Al final se muestra un mensaje diciendo que en la fila tal hay errores por que un fichero es mas grande que otro al tener mas filas o mas columnas.
Eumm, no quiero sonar quisquilloso, pero es que eso no es una buena especificación de lo que tendría de mostrar tu programa . Eso es una descripción en lenguaje natural y sirve para hacerse una idea, pero no para depurarlo.
Lo que hace falta es que digas:

Con los ficheros
-----fich1.txt------
hola
222
3332
----fich2.txt------
hola 2223332
hola 2223332

La salida deberia ser:
Error en fila 1, fichero 2 tiene X carácteres más al final
Error en fila 2, fichero 2 tiene X carácteres más al principio y Y carácteres más al final
Error en fila 3, fichero 2 tiene X carácteres menos

Y con eso puedes empezar a mirar por que no te salen esos mensajes y te salen otros. Para que funcione el programa, tienes que saber qué hace exactamente en cada momento y por qué lo hace, si nó, que funcione es pura suerte .

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #8 (permalink)  
Antiguo 25/11/2008, 14:25
Avatar de congonga  
Fecha de Ingreso: febrero-2008
Ubicación: Concepción
Mensajes: 29
Antigüedad: 16 años, 2 meses
Puntos: 0
Respuesta: ficheros

Sea lo que sea que quieras hacer con dos ficheros, desde mi punto de vista lo que está mal es que los estés comparando en un solo while, al principio de tu código.

Dado que no sabes si los dos ficheros son iguales, lo que deberías es hacer dos while, uno que recorra el primer fichero y vaya comparando dentro, línea por línea del segundo, o viceversa. Si los dos ficheros son distintos, nunca se cumplirá la condición del while de manera que ambos ficheros puedan ser recorridos completamente.

Y GreeEyed: te encuentro toda la razón.
  #9 (permalink)  
Antiguo 26/11/2008, 01:45
 
Fecha de Ingreso: abril-2007
Mensajes: 166
Antigüedad: 17 años, 1 mes
Puntos: 2
Respuesta: ficheros

ok voy a solucionarlo haber...
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 09:12.