• Publicidad

Interpretar un fichero EMBL

Perl aplicado a la bioinformática

Interpretar un fichero EMBL

Notapor mcorraliza » 2011-12-15 13:06 @588

¡Hola!
Tengo que crear un programa capaz de parsear un fichero EMBL. «El programa construido deberá ser capaz de leer ficheros del tipo EMBL. En la parte final, entre las líneas que contienen al principio "SQ" y "//" tiene la secuencia genómica correspondiente, con la que se deberá trabajar.»

Mi pseudocódigo es algo así como
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. foreach my$line(@array) {
  2.  do {next;}
  3.    until ($line eq 'SQ.');}
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4

para saltar las primeras lineas de código y luego quiero almacenarlas todas en una cadena llamada $dna, ¿¿cómo lo hago???

Mi idea es hacer un
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.  do {$dna .= $line}
  2.                         until ($line eq '//')
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


pero me da error =(

¡¡Muchas gracias por la ayuda, un saludo!!
Última edición por mcorraliza el 2011-12-16 12:52 @578, editado 1 vez en total
mcorraliza
Perlero nuevo
Perlero nuevo
 
Mensajes: 2
Registrado: 2011-12-15 12:47 @574

Publicidad

Re: Interpretar un fichero EMBL

Notapor explorer » 2011-12-15 15:07 @672

Bienvenido a los foros de Perl en español, mcorraliza.

No nos dices qué error te da.

Una cosa que veo mal es mezclar un bucle foreach() con bucles do{}. Es mejor usar solo uno, y poner condiciones para saber su estás o no dentro de la secuencia, y si estás dentro, lo vas agregando como indicas.

De todas maneras, de forma profesional, no se hace esto, sino que se usa el módulo Bio::SeqIO::embl, como se indica en el Wiki oficial.

De todas maneras, esta es mi versión:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use Modern::Perl;       # Somos modernos
  3. use File::Slurp;        # Modo succionador
  4.  
  5. my $fichero_embl = read_file('ejemplo.embl');           # leemos el fichero EMBL
  6.  
  7. my($secuencia) = $fichero_embl =~ m{^SQ.+?$(.+)^//}sm;  # extraemos la secuencia
  8.  
  9. $secuencia =~ tr/actg//dc;                              # le quitamos cualquier cosa que no sea ATCG
  10.  
  11. say "[$secuencia]";                                     # y lo pintamos
  12.  
  13. __END__
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: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Interpretar un fichero EMBL

Notapor mcorraliza » 2011-12-16 06:27 @310

¡Hola!

Estoy haciendo un programa para bioinformática que me pide lo que dije antes, pero conozco solo lo más básico.

Gracias por el consejo de no mezclar foreach() con do{} porque antes el error era que no me salía nada en la variable $dna, salía vacía, y ahora con una modificación que he hecho me concatena todo el archivo, así que algo he avanzado.

Necesito que la subrutina me concatene solo la secuencia de DNA, lo que está entre SQ y //, y para ello he hecho el siguiente programa, aunque debe tener algún error =S

use strict;
use warnings;
# Lo primero pedimos al usuario que introduzca las funciones que quiera mediante ARGV
print "Por favor introducir el nombre del fichero deseado\n";
my $fichero = <STDIN>;

#Protegemos la apertura del fichero con unless
unless(open(FICHERO, $fichero))
{print "Error!!!! No se ha podido abrir el fichero\n";
exit;
}
#Asignamos todo el contenido del fichero a un array
my @fichero = <FICHERO>;

#Ahora tenemos que parsear el fichero, lo hacemos con una subrutina
my $sequence = fichero(@fichero);

#Ahora tenemos ya la secuencia de DNA con todo
print $sequence;


#######################
sub fichero{
my @array = @_;
my $dna = '';
foreach my $line(@array) {
{(/ID/.. /SQ/ ) and next; #para saltarme toda la cabecera, no me ha funcionado como quería
}
{if ($line =~ /^SQ/) {
foreach $line(@array) {
$dna .= $line
}
}
}
}
$dna =~s/[\s0-9]//g;
return $dna;
}


¡¡Muchas gracias por la ayuda, un saludo!! :D
mcorraliza
Perlero nuevo
Perlero nuevo
 
Mensajes: 2
Registrado: 2011-12-15 12:47 @574

Re: Interpretar un fichero EMBL

Notapor explorer » 2011-12-16 10:36 @483

Más sencillo si solo te quedas con lo que realmente te interesa:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. sub fichero {
  2.     my @array = @_;
  3.     my $dna;
  4.  
  5.     for my $line (@array) {                  # para todas las líneas del fichero...
  6.         if ($line =~ /^SQ/ .. $line =~ /^\/\//) {     # si estamos dentro del rango interesante...
  7.             next if $line =~ m{^(?:SQ|//)};           # pero no en la primera ni en la última línea...
  8.             $dna .= $line;                            # adjuntamos la línea a la secuencia.
  9.         }
  10.     }
  11.  
  12.     $dna =~ s/[^actg]//gi;                            # quitamos todo lo que no sea ACTG
  13.  
  14.     return $dna;
  15. }
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: 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