• Publicidad

Filtrar lista de datos

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Filtrar lista de datos

Notapor asegurac » 2011-02-25 17:20 @763

Hola a todos, le escribo para solicitar su ayuda. Mi problema es el siguiente: tengo una lista de datos que deseo filtrar (archivo1.txt). Es decir, eliminar algunos de los elementos (utilizando el archivo2.txt). Los archivos originales contienen muchos más elementos.
El archivo1.txt contiene los siguientes datos:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
P21762
O25570
O25225
P56397
P55984
P69996
P14917
Q9R3B3
P14916
Q09064
Q09065
Q09066
Q09067
Q09068
Q8VN83
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


El archivo2.txt:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
P21762
O25570
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4



Para ello he escrito el siguiente código:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #! /usr/bin/perl
  2.  
  3. open (FILE1, "archivo1.txt");
  4. open (FILE2, "archivo2.txt");
  5.  
  6. my @firstdb  = <FILE1>;
  7. my @seconddb = <FILE2>;
  8.  
  9. chomp @firstdb;
  10. chomp @seconddb;
  11.  
  12. foreach $j (@seconddb)  {
  13.         for $i(@firstdb){
  14.        
  15.        
  16.  
  17.                 if ($j ne $i){
  18.                 print "$i\n";
  19.                 }
  20.                
  21.         }
  22.        
  23. }
  24.  
  25.  
  26. close FILE1;
  27. close FILE2;
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


El resultado que obtengo es este:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
O25570
O25225
P56397
P55984
P69996
P14917
Q9R3B3
P14916
Q09064
Q09065
Q09066
Q09067
Q09068
Q8VN83
P21762
O25225
P56397
P55984
P69996
P14917
Q9R3B3
P14916
Q09064
Q09065
Q09066
Q09067
Q09068
Q8VN83
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


En lugar de filtrar la lista de archivo1.txt, éste se imprime varias veces.

El resultado esperado sería:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
O25225
P56397
P55984
P69996
P14917
Q9R3B3
P14916
Q09064
Q09065
Q09066
Q09067
Q09068
Q8VN83
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Como pueden ver, en el resultado esperado se han eliminado los dos primeros elementos de archivo1.txt.

Supongo que algo debo estar definiendo mal en los bucles. ¿Podría alguien ayudarme?

Saludos.
asegurac
Perlero nuevo
Perlero nuevo
 
Mensajes: 34
Registrado: 2008-10-31 05:52 @286

Publicidad

Re: Filtrar lista de datos

Notapor explorer » 2011-02-25 17:42 @779

Hay que cambiar algunas líneas de sitio...
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #! /usr/bin/perl
  2.  
  3. open (FILE1, "archivo1.txt");
  4. open (FILE2, "archivo2.txt");
  5.  
  6. my @firstdb  = <FILE1>;
  7. my @seconddb = <FILE2>;
  8.  
  9. chomp @firstdb;
  10. chomp @seconddb;
  11.  
  12. PRIMERO:
  13. for $i (@firstdb) {
  14.     for $j (@seconddb) {
  15.         next PRIMERO if $j eq $i;       # si hay coincidencia, no lo pintamos
  16.     }
  17.     print "$i\n";                       # no hubo ninguna coincidencia con @seconddb
  18. }
  19.  
  20. close FILE1;
  21. close FILE2;
  22.  
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Filtrar lista de datos

Notapor asegurac » 2011-02-25 17:50 @784

Muchas gracias, ¡funciona!

En la línea 12, al colocar "PRIMERO:" antes de los bucles, ¿qué estás definiendo?
asegurac
Perlero nuevo
Perlero nuevo
 
Mensajes: 34
Registrado: 2008-10-31 05:52 @286

Re: Filtrar lista de datos

Notapor explorer » 2011-02-25 18:08 @797

Le estoy poniendo una etiqueta al bucle for() más externo. Así, cuando queremos ejecutar el next(), indicamos cuál de los dos bucles for() quiero que se refiere ese next().

Como hemos encontrado una coincidencia con el segundo fichero, no hace falta seguir mirando, ni pintar el valor del primer fichero, por lo que pasamos a analizar el siguiente.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 42 invitados