• Publicidad

Acumulación de texto

Perl aplicado a la bioinformática

Acumulación de texto

Notapor gallinaclueca » 2012-05-11 12:54 @579

Hola, estoy elaborando un programa que me separe una lista de bases nitrogenadas en codones (tríos de bases). Para ello he elaborado este código. El problema está en que el archivo 20 tiene todo lo que tienen los archivos anteriores más lo que le correspondería por sí mismo. ¿Cómo lo soluciono?

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. $contador = 0;
  2. @codon    = ();
  3. while ( $contador < 20 ) {
  4.     $contador += 1;
  5.     $espermatozoide = "espermatozoide$contador.txt";
  6.     open( FH,  "$espermatozoide" )        or die "No se puede abrir";
  7.     open( FH2, " > result$contador.txt" ) or die "No se puede abrir";
  8.     while ( $linea = <FH> ) {
  9.         $codon = substr( $linea, 0, 3 );
  10.         push( @codones, $codon );
  11.         print FH2 "@codones:";
  12.  
  13.     }
  14. }
  15. print "hecho";
  16. close(FH);
  17. close(FH2);
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4
Última edición por explorer el 2012-05-11 17:09 @756, editado 1 vez en total
Razón: Formateado de código con Perltidy y poner marcas Perl
gallinaclueca
Perlero nuevo
Perlero nuevo
 
Mensajes: 17
Registrado: 2012-05-11 12:50 @576

Publicidad

Re: Acumulación de texto

Notapor explorer » 2012-05-11 17:32 @772

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

Hay algunas líneas que están fuera de onda...

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. for my $contador ( 1 .. 20 ) {
  2.     my $espermatozoide = 'espermatozoide' . $contador . '.txt';
  3.     my $resultado      = 'result'         . $contador . '.txt';
  4.  
  5.     my @codones;
  6.     open( FH, $espermatozoide )  or  die "No se puede abrir $espermetozoide: $!\n";
  7.     while ( my $linea = <FH> ) {
  8.         push @codones, substr( $linea, 0, 3 ):
  9.     }
  10.     close(FH);
  11.  
  12.     open( FH2, "> $resultado" )  or  die "No se puede abrir $resultado: $!\n";
  13.     print FH2 join ':', @codones;
  14.     close(FH2);
  15. }
  16.  
  17. print "Hecho";
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: Acumulación de texto

Notapor gallinaclueca » 2012-05-14 11:35 @524

Hola. Al ejecutar el programa que mandaste, los archivos result$contador ya no se van acumulando en el contenido, pero sólo salen dos líneas de letras (bases nitrogenadas) separadas de 3 en tres por medio de ":" cuando en los archivos espermatozoide$contador.txt había unas 20 líneas.

¿A qué se debe esta falta de contenido?

En caso de que haya que utilizar el texto acumulado, ¿habría alguna manera o comando de "restar textos acumulados" para obtener lo que tendría que haber en el archivo correspondiente?

Por ejemplo: a result4.txt le sustraemos el contenido de result3.txt en algún ciclo (ya que tenemos 20 archivos) para que quede lo que tendría que haber en result4.txt.

Muchas gracias.
gallinaclueca
Perlero nuevo
Perlero nuevo
 
Mensajes: 17
Registrado: 2012-05-11 12:50 @576

Re: Acumulación de texto

Notapor explorer » 2012-05-14 11:44 @530

Sin ver los archivos, es difícil saber qué pasa.

¿Puedes publicar uno de los archivos de espermatozoide, y luego, cómo debería quedar el result correspondiente?

La forma de "restar" contenido implica que haya que leer todos los archivos, meter la información en hash, y luego hacer las restas.
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: Acumulación de texto

Notapor gallinaclueca » 2012-05-14 11:59 @541

Bien, te publico los archivos espermatozoide1 y result1 que son los primeros que se graban y por tanto no hay acumulación de texto. El archivo result1 es correcto a excepción de que no imprime los ':' a excepción de en ciertos codones.
Adjuntos
espermatozoide1.txt
Archivo de texto origen.
(21 KiB) 168 veces
result1.txt
Archivo resultado.
(350.3 KiB) 149 veces
gallinaclueca
Perlero nuevo
Perlero nuevo
 
Mensajes: 17
Registrado: 2012-05-11 12:50 @576

Re: Acumulación de texto

Notapor explorer » 2012-05-14 12:36 @566

Creo que debes explicar exactamente qué quieres hacer... en qué consiste eso de la acumulación... porque no acabo de entender cómo de un archivo de 21Kb se puede generar otro de más de 350Kb...
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: Acumulación de texto

Notapor gallinaclueca » 2012-05-14 12:38 @568

No hay un solo archivo de 21 kb, hay 20. Y en el archivo 20 se imprime todo el contenido del 1, 2, 3, 4, etc hasta el 20 en lugar de solo el del 20 como le correspondería.
gallinaclueca
Perlero nuevo
Perlero nuevo
 
Mensajes: 17
Registrado: 2012-05-11 12:50 @576

Re: Acumulación de texto

Notapor explorer » 2012-05-14 12:41 @570

O sea... que no es necesario leer los 19 primeros espermatozoide, porque en el 20 está todo, ¿no?

Pues entonces solo tienes que procesar un archivo... el 20.
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: Acumulación de texto

Notapor gallinaclueca » 2012-05-14 12:44 @572

No me he explicado bien. En espermatozoide1 hay una serie de bases que quiero imprimir separadas de 3 en 3 en result 1. En espermatozoide2 hay otra serie que quiero imprimir en result2 y asi con todas.
gallinaclueca
Perlero nuevo
Perlero nuevo
 
Mensajes: 17
Registrado: 2012-05-11 12:50 @576

Re: Acumulación de texto

Notapor explorer » 2012-05-14 12:55 @579

¿Pero porqué sale tan grande result1?

Te pedí que result1 fuera la salida de espermatozoide1... Y ahora no sé qué formato es ese... salen parejas de codones separadas por espacios, unidas cada pareja por el ':'.

¿Qué formato debe tener result1?

Si espermatozoide1 tiene 422 líneas, según tu código, deben salir los 422 codones del comienzo de todas las líneas, unidos por ':'.

¿No es así?
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

Siguiente

Volver a Bioinformática

¿Quién está conectado?

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

cron