• Publicidad

Comparación de listas

Perl aplicado a la bioinformática

Comparación de listas

Notapor biomacaco » 2011-02-21 17:47 @782

Hola a todos:

Tengo varias listas con un número variable de elementos. Quiero comparar las listas con menor número de elementos contra las listas que tienen mayor número de elementos. Si todos los elementos de la lista con menor número de elementos están contenidos en la lista con mayor número de elementos quiero imprimir el nombre de dicha lista en un archivo de salida.

Este es el script que he desarrollado hasta el momento. Soy nuevo en cuestiones de programación. Ojalá puedan ayudarme. ¡Gracias!

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #! usr/bin/perl
  2.  
  3. # fatache.pl compara las listas generadas por programa.pl (*.bcl) para eliminar las listas con menor numero de elementos,
  4. # pero con los mismos elementos que contienen las listas con mayor numero de elementos
  5.  
  6. open( KOLIST, "/home/daniel/Desktop/queries/kolist" )
  7.     || die("unable to open kolist");
  8.  
  9. while ( $ko = <KOLIST> ) {
  10.     chomp($ko);
  11.     print("$ko\n");
  12.     <STDIN>;
  13.     open( GN, "/home/daniel/Desktop/bcl/$ko.gene" )
  14.         || die("unable to open $ko.gene");
  15.     while ( $gene = <GN> ) {
  16.         chomp($gene);
  17.         print("***$gene***\n");
  18.         open( OCDGN, "/home/daniel/Desktop/queries/$ko/ordenados/$gene.ocd" )
  19.             || die("unable to open $gene.ocd");
  20.         @ocdgenes = <OCDGN>;
  21.         chomp(@ocdgenes);
  22.         $ocdscalar = @ocdgenes;
  23.         print("$ocdscalar\n");
  24.         <STDIN>;
  25.         open( OCDLIST, "/home/daniel/Desktop/queries/$ko/$ko.bcl" )
  26.             || die("unable to open $ko.bcl");
  27.         @ocdlist = <OCDLIST>;
  28.         chomp(@ocdlist);
  29.  
  30.         foreach $ocdelement (@ocdlist) {
  31.             chomp($ocdelement);
  32.             print("+++$ocdelement+++\n");
  33.             open( OCDELEMENTS,
  34.                 "/home/daniel/Desktop/queries/$ko/ordenados/$ocdelement" )
  35.                 || die("unable to open $ocdelement");
  36.             @ocdelements = <OCDELEMENTS>;
  37.             chomp(@ocdelements);
  38.             $ocdelementscalar = @ocdelements;
  39.             print("$ocdelementscalar\n");
  40.  
  41.             #                   <STDIN>;
  42.             if ( $ocdscalar > $ocdelementscalar ) {
  43.                 print("ocdscalar es mayor que ocdelementscalar\n");
  44.                 <STDIN>;
  45.                 $count = 0;
  46.                 print("$count\n");
  47.                 while ( $count < $ocdscalar ) {
  48.                     print("$ocdelements[$count]\n");
  49.                     print("$ocdgenes[$count]\n");
  50.                     <STDIN>;
  51.                     foreach $ocdelements (@ocdelements) {
  52.                         chomp($ocdelemnts);
  53.                         foreach $ocdgenes (@ocdgenes) {  
  54.                             chomp($ocdgenes);
  55.                             if ( $ocdelements =~ /$ocdgenes/ ) {
  56.                                 $count++;
  57.                                 if ( $count == $ocdelementscalar ) {
  58.                                     print(
  59.                                         "$gene.ocd contiene todos los elementos de $ocdelement\n"
  60.                                     );
  61.                                     <STDIN>;
  62.                                 }
  63.                             }
  64.                             else {
  65.                                 last;
  66.                             }
  67.                         }
  68.                     }
  69.                 }
  70.             }
  71.         }
  72.     }
  73. }
  74. exit;
Coloreado en 0.005 segundos, usando GeSHi 1.0.8.4
biomacaco
Perlero nuevo
Perlero nuevo
 
Mensajes: 2
Registrado: 2011-02-21 15:09 @673

Publicidad

Re: Comparación de listas

Notapor explorer » 2011-02-21 19:03 @835

Bienvenido a los foros de Perl en Español, biomacaco.

¿Podrías publicar un pequeño ejemplo de las entradas, para poder ejecutar tu programa?

Por otra parte, comentarte que chomp() quita los caracteres de final de línea. Pero solo es necesario hacerlo una vez. Una vez que se lo has quitado a una línea, no es necesario volver a ejecutarlo.

Quiero decir que las líneas 31, 52 y 54, sobran.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Comparación de listas

Notapor biomacaco » 2011-02-21 20:24 @892

Hola, explorer:

Muchas gracias por recibirme, la ayuda y los comentarios.

Anexo algunos archivos "entrada.zip" y "ordenadosX.zip" para ejecutar fatache.pl
Adjuntos
ordenados4.zip
(69.08 KiB) 172 veces
ordenados3.zip
(171.57 KiB) 163 veces
ordenados2.zip
(190.69 KiB) 182 veces
ordenados1.zip
(197.1 KiB) 189 veces
entrada.zip
(118.84 KiB) 146 veces
biomacaco
Perlero nuevo
Perlero nuevo
 
Mensajes: 2
Registrado: 2011-02-21 15:09 @673

Re: Comparación de listas

Notapor explorer » 2011-02-22 17:53 @787

Te pedí un ejemplo PEQUEÑO, no que me enviaras todo. Y además, no está todo. No están los ficheros .gene ni los .ocd.

Y ¿por qué hay 4 ficheros "ordenados"? Según el código, solo hay una carpeta llamada "ordenados".

En cuanto a buscar un array dentro de otro, hay varias soluciones. Las más cómodas consisten en usar módulos como Set::Scalar, Set::Array o incluso Array::Utils.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Bioinformática

¿Quién está conectado?

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

cron