• Publicidad

Cómo hacer un array de hash

¿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.

Cómo hacer un array de hash

Notapor danimera » 2009-03-06 16:36 @733

Resulta que hoy me levante mal... y se me olvidó mucho de lo poco que sabía de Perl. Ahora mi problema es hacer una función que me retorne un array de hash. El nombre de los campos los tengo en un array y son los que serán las Key y el valor lo tengo en otro array que serán los valores para los KEYS para lo que tengo:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my  %dats;
$registros[0] = "5||22junio.jpg||tumb005.jpg||1||22||06||2008";
$registros[1] = "5||22mayo.jpg||tumb005.jpg||1||22||05||2008";
$registros[2] = "5||22marzo.jpg||tumb005.jpg||1||22||03||2008";
@campo = qw(ID nombre imagen categoria dia mes anno); #Estos campos pueden variar
#organizar un array de hash
        my $cantidad_campos = @campo;
        foreach $reg(@registros){


         @campos_reg = split(/\|\|/, $reg);

                for ($i=0;$i<=$cantidad_campos;$i++){

                $dats{$campo[$i]} = $campos_reg[$i];


            #%dats={$campo[$i] => "$campos_reg[$i]"};
            #$dats->{$campo[$i]} = $campos_reg[$i];
                }
        push (@registros_salida,\%dats);



        }

         return @registros_salida;
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Me retorna algo así

Código: Seleccionar todo
$VAR1 = {
          '' => undef,
          'mes' => '08',
          'categoria' => '26',
          'dia' => '09',
          'id' => '305',
          'miniatura' => 'tumb_agosto9punto26.jpg',
          'anno
' => '2008
',
          'nombre' => 'agosto9punto26.jpg'
        };
$VAR2 = $VAR1;
$VAR3 = $VAR1;
$VAR4 = $VAR1;
$VAR5 = $VAR1;
$VAR6 = $VAR1;
$VAR7 = $VAR1;
$VAR8 = $VAR1;
$VAR9 = $VAR1;
$VAR10 = $VAR1;
$VAR11 = $VAR1;


No, ya me mamé con eso. No sé qué pudo pasarme pero no le dí. Gracias por ayudarme y perdón por molestar tanto.
100% Telch - Perl Web Programming
Cali PerlMongers: http://cali.pm.org
Avatar de Usuario
danimera
Perlero frecuente
Perlero frecuente
 
Mensajes: 871
Registrado: 2005-06-23 19:02 @834
Ubicación: Colombia

Publicidad

Notapor Perl user » 2009-03-06 17:08 @755

perldoc perldsc

Saludos,
Marco A. Manzo
[email protected]
http://www.unixmonkeys.com/amnesiac/
Perl Programming Language
Perl user
Maestro honorario
Maestro honorario
 
Mensajes: 271
Registrado: 2004-11-03 21:11 @924

Notapor explorer » 2009-03-06 18:49 @826

Estás usando el mismo diccionario %dats en cada vuelta de $reg. Entonces \%dats siempre es el mismo valor, por lo que en cada bucle de $cantidad_datos estás sobrescribiendo el mismo diccionario.

Deberías reservar un nuevo %dats en cada una de esas vueltas.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor kidd » 2009-03-07 08:52 @411

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl -w

use strict;
use Data::Dumper;

my @registros;

$registros[0] = "5||22junio.jpg||tumb005.jpg||1||22||06||2008";
$registros[1] = "5||22mayo.jpg||tumb005.jpg||1||22||05||2008";
$registros[2] = "5||22marzo.jpg||tumb005.jpg||1||22||03||2008";

my @campo = qw(ID nombre imagen categoria dia mes anno); #Estos campos pueden variar

my @registros_salida;

#organizar un array de hash
my $cantidad_campos = $#campo;

for my $reg(@registros){

    my @campos_reg = split(/\|\|/, $reg);

    my %dats;

    for (my $i=0;$i<=$cantidad_campos;$i++){
        $dats{$campo[$i]} = $campos_reg[$i];
    }


    push (@registros_salida,\%dats);

}

print Dumper( \@registros_salida );
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4



Resultado:

Código: Seleccionar todo
$VAR1 = [
          {
            'categoria' => '1',
            'ID' => '5',
            'dia' => '22',
            'mes' => '06',
            'anno' => '2008',
            'imagen' => 'tumb005.jpg',
            'nombre' => '22junio.jpg'
          },
          {
            'categoria' => '1',
            'ID' => '5',
            'dia' => '22',
            'mes' => '05',
            'anno' => '2008',
            'imagen' => 'tumb005.jpg',
            'nombre' => '22mayo.jpg'
          },
          {
            'categoria' => '1',
            'ID' => '5',
            'dia' => '22',
            'mes' => '03',
            'anno' => '2008',
            'imagen' => 'tumb005.jpg',
            'nombre' => '22marzo.jpg'
          }
        ];
Uriel Lizama Perl programmer fundador de Perl en Español
Perl Programming Language
Avatar de Usuario
kidd
Creador de Perl en Español
Creador de Perl en Español
 
Mensajes: 1166
Registrado: 2003-10-15 16:52 @744
Ubicación: México

Notapor explorer » 2009-03-07 10:56 @497

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl
use strict;
use warnings;
use diagnostics;

## Constantes
my @registros = qw(
    5||22junio.jpg||tumb005.jpg||1||22||06||2008
    5||22mayo.jpg||tumb005.jpg||1||22||05||2008
    5||22marzo.jpg||tumb005.jpg||1||22||03||2008
);

#Estos campos pueden variar
my @campos = qw(
    ID nombre imagen categoria dia mes anno
);

## Variables
my @registros_salida;


## Organizar la estructura AoH
foreach (@registros) {

    my %dats;

    @dats{@campos} = split '\|\|';  # Rellenamos %dats
                                    # con los @campos leídos desde el registro.
                                    # Suponemos que el orden de @campos
                                    # coincide con el de extracción del registro leído.

    push @registros_salida, \%dats;
}

use Data::Dumper;
print Dumper \@registros_salida;
Coloreado en 0.001 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: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor danimera » 2009-03-09 11:30 @520

¡Huy, gracias!... si ven las cosas por las cuales uno se bloquea... casi que no podía con eso. Gracias.
100% Telch - Perl Web Programming
Cali PerlMongers: http://cali.pm.org
Avatar de Usuario
danimera
Perlero frecuente
Perlero frecuente
 
Mensajes: 871
Registrado: 2005-06-23 19:02 @834
Ubicación: Colombia


Volver a Intermedio

¿Quién está conectado?

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

cron