• Publicidad

Generar listas asociativas dentro de bucle

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

Generar listas asociativas dentro de bucle

Notapor abhortas » 2017-12-18 12:25 @559

Hola a todos.

Tengo una duda acerca del uso de las listas asociativas.

Quiero recorrer X archivos (pongamos por ejemplo, 10) de un directorio, y crear una lista asociativa para cada archivo, donde iré guardando información de cada archivo. Pero a la hora de definir cada lista, no sé cómo denominarlas para que no me dé error.

Con un ejemplo se entiende mejor.

El código base que tengo sería algo así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. $dir="path al directorio con los archivos"
  2.  
  3. chdir $dir
  4. foreach $elem(<*>){
  5.     my %lista$elem;
  6.     open(FILE,"$elem");
  7.     while($linea = <FILE>){
  8.           chomp($linea);
  9.           @a=split(/\t/,$linea);
  10.           $lista$elem{$a[0]}=$a[1];
  11.     }
  12. }
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


El problema de esta idea de código es que da error al definir la lista (my %lista$elem).

Seguro que es una tontería y tiene solución fácil, pero llevo dándole vueltas un rato y no sé cómo solucionarlo.

Agradecería toda ayuda.
abhortas
Perlero nuevo
Perlero nuevo
 
Mensajes: 7
Registrado: 2015-10-23 05:57 @290

Publicidad

Re: Generar listas asociativas dentro de bucle

Notapor explorer » 2017-12-18 13:41 @611

Sí, es un error de sintaxis. También faltan varios ';' al final de las sentencias.

Mira esta versión:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/env perl
  2. use v5.24;
  3. use autodie;
  4.  
  5. my $dir = "path al directorio con los archivos";
  6.  
  7. chdir $dir;
  8.  
  9. my %lista;
  10.  
  11. for my $archivo (<*>) {
  12.     open my $FILE,'<', $archivo;
  13.  
  14.     while (my $linea = <$FILE>) {
  15.         chomp $linea;
  16.  
  17.         my @a = split /\t/, $linea;
  18.  
  19.         $lista{$archivo}{$a[0]} = $a[1];
  20.     }
  21.  
  22.     close $FILE;
  23. }
  24.  
  25. use Data::Dumper;
  26. say Dumper \%lista;
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: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Generar listas asociativas dentro de bucle

Notapor abhortas » 2017-12-19 09:38 @443

Como siempre, muchas gracias, explorer.

Sí, los ';' faltaban por escribir rápido el código.

Y en cuanto a la solución, no había pensado en que se podrían generar listas de listas.

Muchas gracias.
abhortas
Perlero nuevo
Perlero nuevo
 
Mensajes: 7
Registrado: 2015-10-23 05:57 @290

Re: Generar listas asociativas dentro de bucle

Notapor explorer » 2017-12-19 10:23 @474

En la documentación de Perl hay un documento específico sobre ese tema: perllol.

Más información, en tu propio ordenador con el comando perldoc perllol, y en la Web (traducido al español).
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


Volver a Intermedio

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado