• Publicidad

Extracción de columnas

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Extracción de columnas

Notapor xtr1985 » 2010-04-15 08:14 @384

Hola, mi duda está aquí: quería conseguir hacer un programa que de un archivo (HPRD.txt) con mucha información, cogiera solo dos columnas y me las pasase a otro archivo (HPRD2.txt), y convertir las dos columnas en una, eliminando repeticiones. El problema está en que cuando voy a la terminal para que el programa funcione, parece que funciona, pero el archivo HPRD2.txt no se corresponde a los datos que me salen en la terminal: el archivo .txt me repite cada vez los mismos datos... No sé si alguien me pudiera ayudar... Gracias.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use strict;
  2.  
  3. my $interac1=2;
  4. my $interac2=5;
  5. my $int1;
  6. my $int2;
  7. my %nodes;
  8. my %edge;
  9. my $edge;
  10.  
  11.  
  12. my $i=0;
  13. my $j=0;
  14. my $b=0;
  15.  
  16. open (IN,"HPRD.txt");
  17. chomp;
  18. while(<IN>)
  19.         {
  20.         if ($_ =~ /\w/){
  21.         ($int1,$int2)=(split '\t')[$interac1,$interac2];
  22.         $int1=~/\w/;
  23.         $edge{$int1."\t".$int2}=0;
  24.         $nodes{$int1}=0;
  25.         $nodes{$int2}=0;
  26.         print $int1,"\n",$int2,"\n";
  27.         $i++;
  28.         }
  29.         }
  30. close IN;
  31.  
  32. open (OUT, ">HPRD2.txt");
  33.  
  34. for $b (0..$i)
  35.         {
  36.   print OUT $int1,"\n",$int2,"\n";
  37.         $i++;
  38.         }
  39. close OUT;
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
xtr1985
Perlero nuevo
Perlero nuevo
 
Mensajes: 11
Registrado: 2010-04-08 07:50 @368

Publicidad

Re: Extracción de columnas

Notapor explorer » 2010-04-15 09:23 @433

A ver... se trata de abrir el fichero, leer dos de las columnas de la fila, y sacarlas a otro fichero... siempre y cuando no se hayan salido antes.

Necesitamos abrir los dos ficheros, leer línea a línea el fichero de entrada. Sacar las columnas interesantes. Y si, juntas, no han salido antes, sacarlas al fichero de salida. Para esto último, usaremos un hash, como estás usando.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use diagnostics;
  5.  
  6. my %hemos_visto;
  7.  
  8. # Abrimos ficheros en lectura y escritura
  9. open my $IN,  q[<], 'HPRD.txt'
  10.     or die "ERROR: No puedo leer el fichero: $!\n";
  11.  
  12. open my $OUT, q[>], 'HPRD2.txt'
  13.     or die "ERROR: No puedo escribir: $!\n";
  14.  
  15. # Para todo el fichero de entrada
  16. while (<$IN>) {
  17.     if (/\w/) {
  18.         chomp;
  19.  
  20.         my ($columna1, $columna2) = (split /\t/)[2,5];
  21.  
  22.         my $clave = "$columna1\t$columna2\n"; # Nuestra $clave serán las dos columnas
  23.  
  24.         unless ($hemos_visto{$clave}) {       # Si no hemos visto a $clave antes...
  25.             print $OUT $clave;                #   la sacamos al fichero
  26.             $hemos_visto{$clave} = 'si';      #   y ahora sí que la hemos visto
  27.         }
  28.     }
  29. }
  30.  
  31. close $IN;
  32. close $OUT;
  33.  
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: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Extracción de columnas

Notapor xtr1985 » 2010-04-15 13:38 @609

Muchas gracias; otra vez me has solucionado un problema... Gracias
xtr1985
Perlero nuevo
Perlero nuevo
 
Mensajes: 11
Registrado: 2010-04-08 07:50 @368


Volver a Básico

¿Quién está conectado?

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

cron