Página 1 de 1

Leer HASH multidimensional

NotaPublicado: 2014-07-02 22:43 @988
por coltx
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.

Re: Leer HASH multidimensional

NotaPublicado: 2014-07-03 04:03 @210
por explorer
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.003 segundos, usando GeSHi 1.0.8.4

Re: Leer HASH multidimensional

NotaPublicado: 2014-07-03 19:36 @858
por coltx
explorer: entendido, muchas gracias.

Re: Leer HASH multidimensional

NotaPublicado: 2014-07-03 22:07 @963
por coltx
explorer, si bien puedo recuperar los datos, ¿cómo los puedo recuperar en una misma línea separados por "," ?

Desde ya, mucha gracias.

Re: Leer HASH multidimensional

NotaPublicado: 2014-07-04 04:33 @231
por explorer
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";

Re: Leer HASH multidimensional

NotaPublicado: 2014-07-05 15:21 @681
por coltx
Gracias, explorer.