Página 1 de 1

Trabajar con dos ficheros simultáneamente

NotaPublicado: 2009-08-20 12:03 @543
por principiante
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??

Re: Trabajar con dos ficheros simultáneamente

NotaPublicado: 2009-08-20 13:18 @596
por explorer
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.

Re: Trabajar con dos ficheros simultáneamente

NotaPublicado: 2009-08-23 12:18 @554
por principiante
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?

Re: Trabajar con dos ficheros simultáneamente

NotaPublicado: 2009-08-23 12:43 @572
por netsoul
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? :)

Re: Trabajar con dos ficheros simultáneamente

NotaPublicado: 2009-08-23 13:09 @590
por principiante
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.

Re: Trabajar con dos ficheros simultáneamente

NotaPublicado: 2009-08-23 14:30 @646
por netsoul
¡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 ;)

Re: Trabajar con dos ficheros simultáneamente

NotaPublicado: 2009-08-23 15:58 @706
por explorer
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 :)

Re: Trabajar con dos ficheros simultáneamente

NotaPublicado: 2009-08-23 17:41 @778
por netsoul
Este Explorer es un cabrón. Tiene 'ojos biónicos'. :lol: