• Publicidad

Eliminación de caracteres de forma específica

Perl aplicado a la bioinformática

Eliminación de caracteres de forma específica

Notapor DavidGV » 2010-01-15 15:40 @694

¡¡Hola a todo el mundo!!

Soy principiante totalmente en el lenguaje Perl y estoy empezando gracias a una asignatura de bioinformática que tengo este cuatrimestre. Mis conocimientos me han permitido medio solucionar un problema que nos han propuesto. El problema en sí es el siguiente: partimos de un árbol filogenético expresado de la siguiente forma (por ejemplo):

(Mur: 0.98798,((((Ba3n: 0.77637,CA3: 0.24356),H: 0.99877),G: 0.77892),J: 0.99872),Gi: 0.88982);

El objetivo es eliminar las distancias de cada especie (los números como 0.77892 y el ":"), es decir, tengo que eliminar todos los números y los caracteres ':' y '.', dejando el árbol limpio del siguiente modo:

(MuR,((((Ba3n,CA3),H),G),O),Gi);

He conseguido eliminar todos los números y los caracteres ':' y '.' pero no sé cómo hacer para no eliminar los números que pertenecen a los nombres de las especies que han de permanecer y no ser eliminados (por ejemplo Ba3n y no obtener Ban).

Dejo aquí el programa que he ideado para que le echéis un vistazo y miréis si se puede solucionar.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl -w
  2. print 'Introduce la ruta del archivo',"\n";
  3. $file=<STDIN>;
  4. chomp $file;
  5. if (not(open(INFILE,$file))){
  6.   while (not(open(INFILE,$file))){
  7.     print "El archivo \"$file\" no puede encontrarse",', introduce una nueva ruta',"\n";
  8.     $file=<STDIN>;
  9.     chomp $file;}}
  10. @datos=<INFILE>;
  11. close INFILE;
  12. $datos= join( '', @datos);
  13. $datos=~ s/\d//g;
  14. $datos=~ s/\.//g;
  15. $datos=~ s/\://g;
  16. print $datos;
  17. exit;
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4


¡¡¡MUCHAS GRACIAS!!!
Última edición por explorer el 2010-01-16 08:11 @383, editado 2 veces en total
Razón: Ortografía, sintaxis, bloques de código
DavidGV
Perlero nuevo
Perlero nuevo
 
Mensajes: 2
Registrado: 2010-01-15 15:24 @683

Publicidad

Re: Eliminación de caracteres de forma específica

Notapor erv-Z » 2010-01-15 16:05 @712

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. $texto = '(Mur: 0.98798,((((Ba3n: 0.77637,CA3: 0.24356),H: 0.99877),G: 0.77892),J: 0.99872),Gi: 0.88982)';
  2. $texto =~ s/\d{2,7}//g;#Eliminamos solo los numeros que contengan de 2 a 7 numeros.
  3. $texto =~ s/\.//g;#Eliminamos los puntos
  4. $texto =~ s/\://g;#Eliminamos los dos puntos
  5. $texto =~ s/0//g;#Eliminamos los ceros
  6. $texto =~ s/\s//g;#Eliminamos los espacios en blanco
  7. print "$texto\n";
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
$ perl a.pl
(Mur,((((Ba3n,CA3),H),G),J),Gi)
 
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
erv-Z
Perlero nuevo
Perlero nuevo
 
Mensajes: 158
Registrado: 2009-07-25 13:00 @583

Re: Eliminación de caracteres de forma específica

Notapor explorer » 2010-01-15 21:38 @943

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

Primero, decirte que no vuelvas a escribir ningún mensaje en mayúsculas, por lo que pueda pasar ;)

Segundo, erv-Z ya te ha dado la solución. Yo, con su permiso, te la comprimiré un poquito más:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$texto = '(Mur: 0.98798,((((Ba3n: 0.77637,CA3: 0.24356),H: 0.99877),G: 0.77892),J: 0.99872),Gi: 0.88982)';

$texto =~ s/: [\d.]+//g; # Quitamos las distancias

print "$texto\n";  # (Mur,((((Ba3n,CA3),H),G),J),Gi)
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


La expresión regular busca un carácter ':', seguido de un ' ' y seguido de un conjunto de uno o más (+) dígitos (\d) o '.'.

La solución ha sido sencilla porque las distancias se expresan todas de la misma forma.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Eliminación de caracteres de forma específica

Notapor DavidGV » 2010-01-16 07:52 @370

¡¡¡Muchas gracias a los dos!!!

Así es muy sencillo. También había pensado en si era posible eliminar los números entre 0,00000 y 0,99999 de alguna manera ya que las distancias siempre están en ese rango.

¡¡¡Gracias de nuevo!!!

¡Un saludo!
DavidGV
Perlero nuevo
Perlero nuevo
 
Mensajes: 2
Registrado: 2010-01-15 15:24 @683

Re: Eliminación de caracteres de forma específica

Notapor explorer » 2010-01-16 18:24 @808

No hemos visto cómo es el fichero de entrada, porque por ahí también podría venir la solución.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
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 2 invitados

cron