Página 1 de 1

Comparar archivos

NotaPublicado: 2011-01-17 09:13 @426
por barbara
Hola...

Escribo porque tengo un gran problema: resulta que para poder terminar mi script me falta un último paso que es comparar dos archivos.

Tengo dos archivos así...

Archivo 1:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
GCTA           
AACCTA
GCCCCA
AACCCA
CTCCAC
......
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Archivo 2:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
AAACCC
TGTTCT
TGGGTG
GGTGTG
GGTATA
......
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Necesito comparar la primera línea de mi archivo 1 con todas las líneas de mi archivo 2, luego la línea 2 del archivo 1 con todas las líneas del archivo 1, y así sucesivamente, y dejar un registro cuando exista una igualdad...

He intentado hacerlo de varias formas que he visto aquí, pero no me resulta...

Si me pudieran ayudar se los agradecería mucho.

P.D.: será mejor pasar el archivo a un arreglo... ¿o sigo manejando los archivos?

Re: Comparar archivos

NotaPublicado: 2011-01-17 11:21 @514
por explorer
Lo normal es meter las líneas del fichero más pequeño en un hash, y luego recorrer línea a línea el fichero más grande. Por cada línea, vemos si esa línea existe en el hash, y si es así, la guardamos como coincidencia.

Por estos foros hay muchos ejemplos de esta misma tarea.

Y te podríamos ayudar más si pudiéramos ver tu código para decirte dónde están los problemas.

Re: Comparar archivos

NotaPublicado: 2011-01-17 11:53 @537
por Marielago
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use common::sense;                      
  2. use autodie;                        
  3. use File::Slurp;
  4.  
  5. my @archivo_uno = read_file('archivo_1');     # archivo 1 y archivo 2 son los nombres de tus ficheros
  6. my @archivo_dos = read_file('archivo_2');
  7. open my $fichero_salida, '>', 'Salida.txt';   # aquí abres el fichero de salida
  8.  
  9. ## Comparación
  10.  
  11. for my $linea (@archivo_uno) {
  12.  
  13.     my $cadena_uno = (split " ", $linea)[0];
  14.  
  15.     if ($cadena_uno ~~ @archivo_dos) {        # si $primera_cadena está en el @segundo_archivo,
  16.  
  17.       print $fichero_salida $linea;           #     lo escribimos en el $fichero_salidas
  18.     }
  19. }
  20.  
  21. close $fichero_salida;                        # lo cierro
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4

Re: Comparar archivos

NotaPublicado: 2011-01-17 11:59 @541
por barbara
Muchas gracias... me sirvió excelente el código que me enviaste... gracias.

Re: Comparar archivos

NotaPublicado: 2011-01-17 12:06 @546
por explorer
Hubiera sido mejor que lo enlazara con el original... :)

Re: Comparar archivos

NotaPublicado: 2011-01-17 12:17 @553
por Marielago
Sí, tienes razón, lo saqué de ahí para hacer mi parte anterior :D

Re: Comparar archivos

NotaPublicado: 2011-01-17 12:28 @561
por explorer
¿Ya te has dado cuenta de que el split() de la línea 13 sobra? barbara quiere comparar líneas enteras, así que sobra el tratamiento de campos.

Pero bueno, está bien aplicado.

Aunque sospecho que una solución con hash sería mucho más rápida.

Re: Comparar archivos

NotaPublicado: 2011-01-17 12:37 @567
por Marielago
Si, eran solo cadenas, ahora lo noto :wink: