• Publicidad

Unión de dos variables para formar una

¿Ya sabes lo que es una referencia? Has progresado, el nível básico es cosa del pasado y ahora estás listo para el siguiente nivel.

Unión de dos variables para formar una

Notapor seafree » 2022-01-21 14:07 @630

Hola, tengo 3 arreglos definidos para almacenar los valores de los HASHES que se crean más abajo:

my @data0=(); my @data1=(); my @data2=();
my $ciclo=0;

Los arreglos definidos formarán 3 seríes con sus datos correspondientes, los arreglos se crean correctamente:

VALORES: 2021-06-07 - 101139.94
VALORES: 2021-06-08 - 95109.08
...

#Obtengo el número de semana como el periodo comprendido
my @valores= values %periodos;
foreach (@valores){
....
#OBTENGO LOS VALORES CORRESPONDIENTES DE ACUERDO A LOS PERIODOS SOLICITADOS
$sum_val="SELECT distinct(fecha_24::date),sum(valor) FROM t_mediciones WHERE (fecha_24 between '@fecha1 ' and '@fecha2') and subest=\'$subest\' group by fecha_24::date,subest order by fecha_24::date";

while (@row=$sth->fetchrow_array){
($fecha_24, $valor)=@row;
print "VALORES: $fecha_24 - $valor <br>";
$valoresAM{$fecha_24}=$valor; #--$fecha is the k, $valor is the $value
}

HASTA AQUÍ TODO BIEN PORQUE OBTENGO LOS RESULTADOS ESPERADOS, PERO LES AGRADECERÉ SU APOYO PARA HACER REFERENCIA QUE LOS VALORES OBTENIDOS SE GUARDEN EN LOS ARREGLOS QUE HAN SIDO DECLARADOS @data0=(); @data1=(); @data2=(); UTILIZANDO LA VARIABLE $ciclo y así utilizar dicha variable para invocar a @data0, @data1, @data2.

Lo que he intentado es:

#print "LLENANDO EL ARREGLO data0";
while (my ($k,$v)=each %valoresAM){
print "$k $v\n";
push @data$ciclo,$v; #aquí intento concatenarle a la variable del arreglo [b]@data el valor de la variable $ciclo con la finalidad de que la variable definida como @data tome el valor de @data0. @data1 y @data2 de acuerdo al ciclo
}

Es un poco complicado, espero haya explicado bien mi problema y alguno de ustedes me puedan apoyar con éste asunto, lo he intentado de diferentes maneras sin llegar al resultado, gracias y respetos para Ustedes.

Saludos.
seafree
Perlero nuevo
Perlero nuevo
 
Mensajes: 296
Registrado: 2012-08-10 11:26 @518

Publicidad

Re: Unión de dos variables para formar una

Notapor explorer » 2022-01-21 16:27 @727

En vez de guardar la información en tres variables, es mucho más cómodo crear una estructura de dos niveles:

push @{$data[$ciclo]}, $v;

Ahí estamos poniendo un nuevo valor $v en el array referenciado por $data[$ciclo], que es a su vez un array, @data, indexado por el valor de $ciclo.

Algo así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
$ perl -E 'for $ciclo (0..2) { for $row ([ "2021-06-07", 101139.94], [ "2021-06-08", 95109.08]) { push @{$data[$ciclo]}, $row->[1] } }; use Data::Printer; p @data'
[
    [0] [
            [0] 101139.94,
            [1] 95109.08
        ],
    [1] [
            [0] 101139.94,
            [1] 95109.08
        ],
    [2] [
            [0] 101139.94,
            [1] 95109.08
        ]
]
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4

Incluso sería más fácil si supieras el número de valores, porque entonces podrías tener otro índice para ellos, y así escribirlo como

$data[$ciclo][$indice_valor] = $v;

Aquí, @data es un array bidimensional (en realidad, es un array de referencias a arrays; esto es lo mismo que cuando se programa en C).

En Perl modernos, la sintaxis @{$data[$ciclo}} se puede escribir también así: $data[$ciclo]->@*, con lo que quedaría así: push $data[$ciclo]->@*, $v;
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: Unión de dos variables para formar una

Notapor seafree » 2022-01-26 11:53 @537

GRANDIOSO. Gracias, explorer.
seafree
Perlero nuevo
Perlero nuevo
 
Mensajes: 296
Registrado: 2012-08-10 11:26 @518


Volver a Intermedio

¿Quién está conectado?

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