• Publicidad

Contar caracteres de un archivo

Perl aplicado a la bioinformática

Contar caracteres de un archivo

Notapor alexclipse » 2013-12-26 07:13 @342

Hola, estoy intentando crear un programa que me cuente el número de '1' y '0' dentro de un archivo. Los '1' representan el número de metilaciones de una cadena de ADN. Hay dos enzimas de restricción, H y M, y por el momento quiero contar el número de metilaciones en cadenas cortadas por la enzima H. Para ello he hecho este programa:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2.  
  3. $metilaciones = 'C:\BIF\practica5\practicaperl\metilacion.txt';    # ruta del archivo
  4. open( METILACIONES, $metilaciones );                               # abrir archivo y asignar filehandle
  5. @lineas             = <METILACIONES>;
  6. $numerolineas       = @lineas;                                     # contar número líneas del archivo
  7. $contador           = 0;                                           # contador del número de H
  8. $contador2          = 0;                                           # contador de líneas
  9. $cuentametilaciones = 0;                                           # contador de 1
  10. while ( $contador2 < $numerolineas ) {                             # mientras haya líneas
  11.     if ( $lineas[$contador2] =~ 'H' ) {                            # si la línea tiene H
  12.         $contador = $contador + 1;                                 # sumo uno al contador de H
  13.         if ( $lineas[$contador2] =~ '1' ) {                        # si la línea con H tiene 1
  14.             $cuentametilaciones++;                                 # sumo uno al contador de metilaciones
  15.         }
  16.     }
  17.     $contador2++;                                                  # siguiente línea
  18. }
  19. print "$contador\n";                                               # imprimir número de H
  20. print "$cuentametilaciones\n";                                     # imprimir número de metilaciones
  21. close METILACIONES;                                                # cerrar archivo
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4

El problema es que lo que estoy haciendo es sumar 1 a las metilaciones cada vez que la línea tiene '1', no contando el número de '1'. ¿Cómo hago para contar los '1'? Muchas gracias.
Última edición por explorer el 2013-12-26 10:13 @467, editado 1 vez en total
Razón: Formateado de código con Perltidy y poner marcas Perl
alexclipse
Perlero nuevo
Perlero nuevo
 
Mensajes: 43
Registrado: 2012-03-27 11:17 @511

Publicidad

Re: Contar caracteres de un archivo

Notapor explorer » 2013-12-26 10:27 @477

Se puede usar el truco del operador tr///, como se comenta en perldoc perlop:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use v5.10;
  3. use autodie;                    # «Es mejor morir que regresar con deshonor» --proverbio Klingon
  4.  
  5. my $haches = 0;
  6. my $unos   = 0;
  7.  
  8. open my $METILACIONES, '<', 'kk.txt';
  9.  
  10. while (my $linea = <$METILACIONES>) {
  11.     next if -1 == index $linea, 'H';    # pasamos a la siguiente si la $linea no tiene 'H'
  12.  
  13.     $haches++;
  14.  
  15.     $unos += $linea =~ tr/1/1/;         # contamos los '1' que hay, y los acumulamos
  16. }
  17.  
  18. say "H: $haches. 1: $unos.";
  19.  
  20. close $METILACIONES;
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: Contar caracteres de un archivo

Notapor alexclipse » 2013-12-27 04:35 @232

Muchas gracias por la ayuda, aunque conseguí solucionarlo de otro modo.
alexclipse
Perlero nuevo
Perlero nuevo
 
Mensajes: 43
Registrado: 2012-03-27 11:17 @511


Volver a Bioinformática

¿Quién está conectado?

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