• Publicidad

Leer HASH multidimensional

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

Leer HASH multidimensional

Notapor coltx » 2014-07-02 22:43 @988

Hola estimados. Quisiera que me pudieran ayudar con lo siguiente. Resulta que desde un webservice recibo el siguiente hash:

$VAR1 = {
'DATO1' => 'VALOR1',
'DATO2' => 'VALOR2',
'DATO3' => 'VALOR3',
'DATO4' => 'VALOR5',
'DATO5' => [
{
'SUBDATO1' => '11111111',
'SUBDATO2' => '22222222',
'SUBDATO3' => '33333333',
'SUBDATO4' => '44444444',
'SUBDATO5' => '55555555'
},
{
'SUBDATO1' => '333333',
'SUBDATO2' => '222222',
'SUBDATO3' => '3223231',
'SUBDATO4' => '56432145',
'SUBDATO5' => '787678765'
}
]
};


Si bien tengo un script que lee hasta el DATO4, favor su ayuda para leer los SUBDATO.... que corresponden al DATO5, ya que recibo ARRAY(0x1df4658)... Este es parte del script

while (my ($k,$v)=each $result)
{
print "$k $v\n"
}

DATO1 VALOR1
DATO2 VALOR2
DATO3 VALOR3
DATO4 VALOR4
DATO5 ARRAY(0x1df4658)

Por su ayuda, muchas gracias.
coltx
Perlero nuevo
Perlero nuevo
 
Mensajes: 79
Registrado: 2011-09-16 08:01 @376

Publicidad

Re: Leer HASH multidimensional

Notapor explorer » 2014-07-03 04:03 @210

Bueno, una forma de hacerlo es... recursiva:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use v5.14;
  3.  
  4. my $VAR1 = {
  5.         'DATO1' => 'VALOR1',
  6.         'DATO2' => 'VALOR2',
  7.         'DATO3' => 'VALOR3',
  8.         'DATO4' => 'VALOR5',
  9.         'DATO5' => [
  10.                 {
  11.                         'SUBDATO1' => '11111111',
  12.                         'SUBDATO2' => '22222222',
  13.                         'SUBDATO3' => '33333333',
  14.                         'SUBDATO4' => '44444444',
  15.                         'SUBDATO5' => '55555555'
  16.                 },
  17.                 {
  18.                         'SUBDATO1' => '333333',
  19.                         'SUBDATO2' => '222222',
  20.                         'SUBDATO3' => '3223231',
  21.                         'SUBDATO4' => '56432145',
  22.                         'SUBDATO5' => '787678765'
  23.                 }
  24.         ]
  25. };
  26.  
  27.  
  28. sub volcado_hash {
  29.         my $ref = shift;
  30.  
  31.         while (my($k,$v) = each %$ref) {
  32.  
  33.                 if (ref($v) eq 'ARRAY') {                               # Si es un array anónimo...
  34.                         for my $hash_ref (@$v) {                        # Para todos los elementos del array...
  35.                                 volcado_hash($hash_ref);                # Suponemos que son también hashes. Los volcamos
  36.                         }
  37.                 }
  38.                 else {
  39.                         say "$k => $v";
  40.                 }
  41.         }
  42. }
  43.  
  44. volcado_hash($VAR1);
Coloreado en 0.004 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: Leer HASH multidimensional

Notapor coltx » 2014-07-03 19:36 @858

explorer: entendido, muchas gracias.
coltx
Perlero nuevo
Perlero nuevo
 
Mensajes: 79
Registrado: 2011-09-16 08:01 @376

Re: Leer HASH multidimensional

Notapor coltx » 2014-07-03 22:07 @963

explorer, si bien puedo recuperar los datos, ¿cómo los puedo recuperar en una misma línea separados por "," ?

Desde ya, mucha gracias.
coltx
Perlero nuevo
Perlero nuevo
 
Mensajes: 79
Registrado: 2011-09-16 08:01 @376

Re: Leer HASH multidimensional

Notapor explorer » 2014-07-04 04:33 @231

Pues cambiando la forma del print()... en lugar de pedirle que lo haga por líneas, le dices que lo pinte tal cual, seguido de una coma.

Otra forma sería almacenar la salida en una variable escalar para, al final, quitar la última coma sobrante por medio de un chop(), y finalmente, sacarla con un solo print().

Otra forma es ir almacenando los valores en un array, con un push(), y al final sacarlo todo con un print join(',', @array), "\n";
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: Leer HASH multidimensional

Notapor coltx » 2014-07-05 15:21 @681

Gracias, explorer.
coltx
Perlero nuevo
Perlero nuevo
 
Mensajes: 79
Registrado: 2011-09-16 08:01 @376


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: Bing [Bot] y 15 invitados