• Publicidad

Contador de palabras por secuencia

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

Contador de palabras por secuencia

Notapor davids84 » 2011-05-11 19:22 @849

Hola, ¿qué tal...?

Quisiera ver si me podrían ayudar con este problema que tengo...

Estoy haciendo un código en el cual tengo que contar un par de palabras que son "Pre y Post"... pero algo anda mal ya que me sí me imprime cuántas veces se encontraron dichas palabras pero tengo la duda de cómo separar mi archivo por el ">" que está al principio de cada línea para así hacerlo por segmentos...

Espero y me haya explicado correctamente. Este es mi archivo de entrada:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
  1. >Secuencia 1
  2. 1       99aa, >Pre_G19AR2G01BCA7... *
  3. 2       99aa, >Pre_G19AR2G01A18P... at 98%
  4. 3       99aa, >Pre_G19AR2G01A2BF... at 100%
  5. >Secuencia 2
  6. 1       96aa, >Post_G19AR2G05F2B... at 97%
  7. 2       96aa, >Post_G19AR2G05F3L... at 97%
  8. 3       96aa, >Post_G19AR2G05FV4... at 97%
  9. 4       96aa, >Post_G19AR2G05GF0... at 97%
  10. 5       96aa, >Post_G19AR2G05GF6... at 97%
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
Y este mi código:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. open(my $fh, $ARGV[0]) or die "No se puede abrir el archivo\n";
  2.  
  3. my @content = <$fh>;
  4. close(FILE);
  5.  
  6. my $i;
  7. my $j;
  8.  
  9.         foreach (@content) {
  10.              $i++ if ($_ =~ /Pre/);
  11.         }
  12.         print "$i\t";
  13.  
  14.         foreach (@content) {
  15.              $j++ if ($_ =~ /Post/);
  16.         }
  17.         print "$j\n";
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Les agradecería mucho su ayuda.

Saludos
davids84
Perlero nuevo
Perlero nuevo
 
Mensajes: 20
Registrado: 2011-01-27 13:14 @593

Publicidad

Re: Contador de palabras por secuencia

Notapor davids84 » 2011-05-11 21:02 @918

De verdad, necesito que alguien me pueda aconsejar qué puedo hacer... Ya logré imprimir el encabezado donde se posiciona el ">" pero el valor de $i y de $j no es el valor adecuado...

Aquí está mi código:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. open(my $fh, $ARGV[0]) or die "No se puede abrir el archivo\n";
  2. print "Cluster\tPre\tPost\n";
  3.  
  4. my @content = <$fh>;
  5.  
  6. close(FILE);
  7.  
  8. my $i;
  9. my $j;
  10.  
  11. foreach (@content) {
  12.        
  13.         if (/^>(Cluster.*)/){
  14.         print "$1";
  15.  
  16.         foreach (@content) {
  17.              $i++ if ($_ =~ /Pre/);
  18.         }
  19.         print "\t$i\t";
  20.  
  21.  
  22.         foreach (@content) {
  23.              $j++ if ($_ =~ /Post/);
  24.         }
  25.         print "$j\n";
  26.         }
  27. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Nota: los valores de $i y de $j los incrementa muchísimo...

¡¡¡¡por favor, ayudaaa!!!!
davids84
Perlero nuevo
Perlero nuevo
 
Mensajes: 20
Registrado: 2011-01-27 13:14 @593

Re: Contador de palabras por secuencia

Notapor ileiva » 2011-05-11 22:15 @968

Hola.

No me queda clara tu problemática. ¿Quieres contar la cantidad de "Pre" y "Post" después del símbolo ">" por cada línea? ¿A eso te refieres con segmento? ¿O quieres contar la cantidad de "Pre" antes y después de ">" ?

Otra cosa, la expresión regular ^>(Cluster.*) no se parece a nada del archivo de entrada que pusiste, no entiendo eso tampoco.

Sería bueno que aclararas aquello para poder ayudarte.
Saludos.
Avatar de Usuario
ileiva
Perlero nuevo
Perlero nuevo
 
Mensajes: 30
Registrado: 2011-04-23 03:25 @184
Ubicación: Santiago, Chile

Re: Contador de palabras por secuencia

Notapor explorer » 2011-05-12 04:56 @247

Esta es mi versión (no probada):
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2.  
  3. open my $fh, $ARGV[0] or die "No se puede abrir el archivo\n";
  4.  
  5. print "Cluster\tPre\tPost\n";
  6.  
  7. my($cluster,$pre,$post);
  8.  
  9. while (<$fh>) {
  10.  
  11.     if (/^>(.*)/){
  12.         if ($cluster) {
  13.             print "$cluster\t$pre\t$post\n";
  14.         }
  15.         $pre = $post = 0;
  16.         $cluster = $1;
  17.     }
  18.     elsif (/>Pre/) {
  19.         $pre++;
  20.     }
  21.     elsif (/>Post/) {
  22.         $post++;
  23.     }
  24. }
  25.  
  26. if ($cluster) {
  27.     print "$cluster\t$pre\t$post\n";
  28. }
  29.  
  30. close $fh;
Coloreado en 0.001 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: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Contador de palabras por secuencia

Notapor davids84 » 2011-05-12 08:49 @409

Justamente, explorer... eres un fenómeno.... ¿¿¿¿me podrías decir en qué estaba mal????... Entiendo que es en el @arreglo... ¿¿¿Me podrías dar unos breves consejos???.... La verdad, sé muy poco de esto... ¡¡¡¡soy nuevo!!!!...


¡¡¡¡Saludos!!!!
davids84
Perlero nuevo
Perlero nuevo
 
Mensajes: 20
Registrado: 2011-01-27 13:14 @593

Re: Contador de palabras por secuencia

Notapor explorer » 2011-05-12 09:35 @441

El problema es que estás metiendo unos bucles dentro de otros: por cada elemento de @content, recorres todos los elementos de @content. Así que, en total, estás leyendo los elementos de @content 2 * (número de elementos de @content) ** 2, cuando, realmente, solo es necesario leerles una vez (procesar línea por línea), lo que hacemos con un simple bucle while().
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: Contador de palabras por secuencia

Notapor davids84 » 2011-05-12 10:59 @499

Aaahh, ok, ok... Gracias por el aporte... entonces... lo que estaba haciendo era multiplicar los valores... y por eso me inflaba los valores demasiado.

¡¡¡¡¡Gracias Explorer!!!!!


¡Saludos!
davids84
Perlero nuevo
Perlero nuevo
 
Mensajes: 20
Registrado: 2011-01-27 13:14 @593


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: Google [Bot] y 0 invitados

cron