• Publicidad

Trabajar con dos ficheros simultáneamente

Perl aplicado a la bioinformática

Trabajar con dos ficheros simultáneamente

Notapor principiante » 2009-08-20 12:03 @543

He creado un programa en el cual partiendo del contenido de un archivo realiza una serie de operaciones hasta obtener un resultado.

¿¿Cómo podría hacer para que ese mismo programa trabaje con el contenido de dos fichero distintos simultáneamente sin tener que escribir el código dos veces (una para cada uno de los fichero) y obtener un resultado para cada fichero??
Última edición por explorer el 2009-08-23 16:45 @739, editado 2 veces en total
Razón: Ortografía
principiante
Perlero nuevo
Perlero nuevo
 
Mensajes: 27
Registrado: 2009-08-16 12:11 @549

Publicidad

Re: Trabajar con dos ficheros simultáneamente

Notapor explorer » 2009-08-20 13:18 @596

Con un arreglo y luego un bucle:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my @ficheros = qw( fichero1.txt fichero2.txt );

for my $fichero (@ficheros) {

    open my $fh, q[<], $fichero or die "ERROR: No pude abrir $fichero: $!\n";
    my @fichero = <$fh>;
    # procesamos @fichero
    close $fh;
}
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Pero seguro que hay otras formas de hacerlo.
Última edición por explorer el 2009-08-23 16:46 @740, editado 2 veces en total
Razón: Typo
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: Trabajar con dos ficheros simultáneamente

Notapor principiante » 2009-08-23 12:18 @554

Me he dado cuenta que de esa forma no obtengo los resultados que quiero porque si en lugar de utilizar dos ficheros diferentes utilizo el mismo fichero dos veces para cada uno de ellos obtengo unos resultados distintos cuando debería obtener los mismos.

Creo que esto se debe a que los resultados que imprimo proceden de unos contadores, ya que los resultados para el primer archivo son correctos pero para el segundo los resultados se suman a los del primero.

¿Cómo puedo solucionarlo?
Última edición por explorer el 2009-08-23 16:46 @740, editado 3 veces en total
principiante
Perlero nuevo
Perlero nuevo
 
Mensajes: 27
Registrado: 2009-08-16 12:11 @549

Re: Trabajar con dos ficheros simultáneamente

Notapor netsoul » 2009-08-23 12:43 @572

principiante escribiste:Me he dado cuenta que de esa forma no obtengo los resultados que quiero porque si en lugar de utilizar dos ficheros diferentes utilizo el mismo fichero dos veces para cada uno de ellos obtengo unos resultados distintos cuando deberia obtener los mismos.


Si entendí, en el código que te colocó Explorer, hay formas de modificarlo de tal forma que haga de esa manera. ;)

principiante escribiste:Creo que esto se debe a que los resultados que imprimo proceden de unos contadores, ya que los resultados para el primer archivo son correctos pero para el segundo los resultados se suman a los del primero.

¿Cómo puedo solucionarlo?

¿Qué tipo de contadores? ¿Un código? :)
With Perl
Imagination is more important than knowledge. Albert Einstein.
netsoul
Perlero nuevo
Perlero nuevo
 
Mensajes: 150
Registrado: 2008-05-04 01:11 @091

Re: Trabajar con dos ficheros simultáneamente

Notapor principiante » 2009-08-23 13:09 @590

El código que tengo es:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl -w
  2. use strict;
  3. use warnings;
  4.  
  5. my @ficheros = ($fichero1.txt,$fichero2.txt);
  6.  
  7. for my $fichero (@ficheros) {
  8.  
  9.     unless (open(FICHERO,$fichero)) {
  10.         print "No se puede abrir el fichero \"$fichero\ \n\n"; 
  11.         exit;
  12.     }
  13.  
  14.     my $dna = <FICHERO>;
  15.  
  16.     close FICHERO;
  17.  
  18.     $dna =~ s/\s//g;
  19.  
  20.     my $parte;
  21.     my %numero_partes;
  22.  
  23.     for (my $a=0; $a < (length($dna) - 2) ; $a += 3) {
  24.         my $parte = substr($dna,$a,3);
  25.         $numero_partes{$parte}++;  
  26.     }
  27.  
  28.     for $parte (sort keys %numero_partes) {
  29.         print  "$parte\t$numero_partes{$parte}\n";
  30.     }
  31. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Cada fichero contiene secuencias de ADN y lo que quiero obtener es para cada fichero el número de veces que aparece cada $parte en cada uno de ellos.
Última edición por explorer el 2009-08-23 16:47 @741, editado 4 veces en total
Razón: Ortografía, indentar código
principiante
Perlero nuevo
Perlero nuevo
 
Mensajes: 27
Registrado: 2009-08-16 12:11 @549

Re: Trabajar con dos ficheros simultáneamente

Notapor netsoul » 2009-08-23 14:30 @646

¡Ah!. Parece que entendí, :) . Es sencillo si no me equivoco. Hay que inicializar %numero_partes después de cada salida. Prueba a hacerlo entre las líneas 31 y 32. Aunque hay más formas de solucionarlo ;)
Última edición por explorer el 2009-08-23 16:49 @742, editado 2 veces en total
Razón: Sintaxis
With Perl
Imagination is more important than knowledge. Albert Einstein.
netsoul
Perlero nuevo
Perlero nuevo
 
Mensajes: 150
Registrado: 2008-05-04 01:11 @091

Re: Trabajar con dos ficheros simultáneamente

Notapor explorer » 2009-08-23 15:58 @706

La línea 5
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my @ficheros = ($fichero1.txt,$fichero2.txt);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

debería ser
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my @ficheros = ("$fichero1.txt","$fichero2.txt");
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


En cuanto al código, a mi me parece que está bien. Teniendo el my %numero_partes; dentro del bucle, es inicializado en cada ciclo.

Lo único que haría sería poner un print() al final del bucle, para separar los datos de un fichero de los del siguiente :)
Última edición por explorer el 2009-08-23 16:49 @742, editado 1 vez en total
Razón: Ortografía
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: Trabajar con dos ficheros simultáneamente

Notapor netsoul » 2009-08-23 17:41 @778

Este Explorer es un cabrón. Tiene 'ojos biónicos'. :lol:
With Perl
Imagination is more important than knowledge. Albert Einstein.
netsoul
Perlero nuevo
Perlero nuevo
 
Mensajes: 150
Registrado: 2008-05-04 01:11 @091


Volver a Bioinformática

¿Quién está conectado?

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