• Publicidad

Combinar tablas

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

Combinar tablas

Notapor Richard10 » 2016-09-12 20:42 @904

Hola.

Nuevamente solicitando su muy valiosa ayuda a algún experto.

Cuento con dos tablas de las cuales quisiera combinar una parte de su información para obtener una tercera tabla con la información de interés. Por ejemplo:
Tabla1
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
ID   Ratio  pValue        
1      0.1   0.05          
2      0.5   0.005          
3      0.8   0.004          
4      0.05  0.0003        
5      0.2   0.02          
6      0.43  0.02
7      0.12  0.05
8      0.45  0.05
9      0.23  0.06
10     0.12  0.03
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

Tabla2
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
ID Score Ref
1   0.9  aaa
3   0.3  bbq
5   0.5  ccc
7   0.1  hah
10  0.7  abc
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

Tabla3 (la que se quiere obtener)
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
ID  Ratio  pValue   Ref
1    0.1   0.05     aaa
3    0.8   0.004    bbq
5    0.2   0.1      ccc
7    0.12  0.12     hah
10   0.12  0.03     abc
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

La tabla 3 solo viene de combinar una parte de la información de la tabla 1 y de la tabla 2.

Si alguien pudiera orientarme sería de gran ayuda.

Saludos.
Richard10
Perlero nuevo
Perlero nuevo
 
Mensajes: 8
Registrado: 2013-04-03 17:35 @774

Publicidad

Re: Combinar tablas

Notapor explorer » 2016-09-13 08:17 @386

Bueno, como el trabajo consiste básicamente en agregar la columna de la tabla 2 a las columnas de la tabla 1, yo leería la información de la tabla 2 y meterlo en un hash, siendo la columna tercera la que está indexada por el valor ID, que es la primera columna.

Luego, abro la tabla 1, y lo leo por líneas.

Por cada línea, saco su ID, y con ese dato y el hash construido antes, coloca la última columna.

El resultado va al archivo de la nueva tabla 3.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Combinar tablas

Notapor Richard10 » 2016-09-14 14:53 @662

Si, pero lo que no sé bien es cómo hacer mi línea de comandos ya que soy muy nuevo en esto. Espero me pudieras ayudar con ello.

Saludos.
Richard10
Perlero nuevo
Perlero nuevo
 
Mensajes: 8
Registrado: 2013-04-03 17:35 @774

Re: Combinar tablas

Notapor explorer » 2016-09-14 15:43 @696

Habías pedido orientación. Si tienes algo de código, muéstralo, y te decimos por dónde vas.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Combinar tablas

Notapor Richard10 » 2016-09-15 11:41 @528

Pues la verdad, algo perdido, pero mi más cercano intento es:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use warnings;
  2. use strict;
  3.  
  4. my $File1.txt = <<FILE;
  5. my $File2.txt = << FILE;
  6.  
  7. my %values;
  8. my $fileIndex = 0;
  9.  
  10. for my $inFileVar (\$File1.txt, \File2.txt) {
  11.     open my $inFile, '<', $inFileVar or die "Can't open $inFileVar: $!\n";
  12.     while (<inFile>) {
  13.         chopm;
  14.         my ($id,$value) = split;
  15.         next if $id eq 'ID';
  16.  
  17.         $values{$id}[$fileIndex] = $value;
  18.     }
  19.     ++$fileIndex;
  20. }
  21.  
  22. for my $id (sort keys %values) {
  23.     print "$id";
  24.     print ' ', $values{$id}[$_] || 0 for 0 .. $fileIndex - 1;
  25. } > File3.txt
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


pero no obtengo nada :( o no como quiero (que es que de el archivo1 se agreguen los valores del archivo2 de los datos contenidos en 1) ya que una tabla no tiene el mismo número de datos y solo coinciden en el ID.

Saludos.
Última edición por explorer el 2016-09-15 15:22 @682, editado 1 vez en total
Razón: Poner marcas de código Perl
Richard10
Perlero nuevo
Perlero nuevo
 
Mensajes: 8
Registrado: 2013-04-03 17:35 @774

Re: Combinar tablas

Notapor explorer » 2016-09-15 15:46 @699

Bueno, el código que muestras es una copia de este otro, del año 2011.

Y no funcionará nunca, porque hay errores muy graves. He arreglado algunos, como por ejemplo poner los ';' al final de las sentencias. Pero otros los he dejado, como el caso de la última línea del programa (y las líneas 4 y 5), que no tiene nada que ver con Perl, sino más bien con un programa tipo shell :) O incluso con instrucciones que no existen, como el caso del extraño 'chopm' (debería ser 'chomp').

Pero aún arreglando los fallos del programa, tampoco resolvería tu problema. El programa no hace lo que quieres que haga.

Te vuelvo a poner la solución (una de ellas). Primero debes leer la información de la Tabla 2. Luego, recorrer las líneas de la Tabla 1, agregarle la última columna, y sacar el resultado hacia la Tabla 3.

¿Crees que puedes resolverlo con esta pista? Se parece algo a lo que nos has mandado. La primera parte está casi bien entre las líneas 11 y 18. Luego hay que hacer un bucle como en las líneas 11 y 12, otro split, sacar el ID, y con ese ID, agregamos la última columna.

¡Ánimo!, que casi lo tienes.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Básico

¿Quién está conectado?

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