• Publicidad

Recomponer un hash

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

Recomponer un hash

Notapor rserrano » 2011-09-30 10:19 @472

Hola tengo una duda de si se pude recomponer un hash. Me explico:
Tengo este hash (los guiones son ejemplo para separar los datos):
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
100022-Cliente1-Sucursal Principal-101-6
100022-Cliente1-Sucursal Principal-103-1
100022-Cliente1-Sucursal Principal-104-2
100022-Cliente1-Sucursal Principal-105-45
100022-Cliente1-Sucursal Principal-108-6
100022-Cliente1-Sucursal Principal-109-1
100022-Cliente1-Sucursal Principal-110-8
100024-Cliente2 -Constitucion-101-41
100024-Cliente2 -Constitucion-103-76
100024-Cliente2 -Constitucion-101-41
100024-Cliente2 -Constitucion-105-343
100024-Cliente2 -Constitucion-107-3
100024-Cliente2 -Constitucion-108-38
100024-Cliente2 -Constitucion-109-11
100024-Cliente2 -Constitucion-110-30
100024-Cliente2 -Constitucion-111-34
 
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Y lo que quiero es consolidad toda los datos de un código de cliente así
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
100022-Cliente1-Sucursal Principal-101-6-103-1-104-2-105-45-108-6-109-1-110-8
100024-Cliente2 -Constitucion-101-41-103-76-104-195-108-38-108-38-109-11110-30-11-34
 
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

¿Es posible hacer esto?

saludos
rserrano
Perlero nuevo
Perlero nuevo
 
Mensajes: 7
Registrado: 2011-09-29 14:41 @653

Publicidad

Re: Recomponer un hash

Notapor explorer » 2011-09-30 11:03 @502

Esta es una posible solución. Si tenemos un fichero así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
100022-Cliente1-Sucursal Principal-101-6
100022-Cliente1-Sucursal Principal-103-1
100022-Cliente1-Sucursal Principal-104-2
100022-Cliente1-Sucursal Principal-105-45
100022-Cliente1-Sucursal Principal-108-6
100022-Cliente1-Sucursal Principal-109-1
100022-Cliente1-Sucursal Principal-110-8
100024-Cliente2 -Constitucion-101-41
100024-Cliente2 -Constitucion-103-76
100024-Cliente2 -Constitucion-101-41
100024-Cliente2 -Constitucion-105-343
100024-Cliente2 -Constitucion-107-3
100024-Cliente2 -Constitucion-108-38
100024-Cliente2 -Constitucion-109-11
100024-Cliente2 -Constitucion-110-30
100024-Cliente2 -Constitucion-111-34
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

entonces podemos hacer un programa así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use utf8;
  3. use Modern::Perl;       # Somos modernos
  4. use autodie;            # es mejor morir que regresar con deshonor (proverbio Klingon)
  5.  
  6. use File::Slurp;
  7.  
  8.  
  9. my %hash;
  10.  
  11. my @fichero = read_file('kk.txt', chomp => 1);
  12.  
  13. # Interpretación
  14. for my $línea (@fichero) {
  15.    
  16.     # 100022-Cliente1-Sucursal Principal-101-6
  17.     my($id, $cliente, $sucursal, $code) = split /-/, $línea, 4; # Partimos la $línea en 4 partes
  18.  
  19.     push @{ $hash{"$id-$cliente-$sucursal"} }, $code;           # Almacenamos en un hash de array
  20. }
  21.  
  22. # Impresión
  23. use Data::Dumper;
  24. say Dumper \%hash;
  25.  
  26. # Es un hash, cuyos valores son array, cada uno guardando los códigos finales
  27. #$VAR1 = {
  28. #    '100024-Cliente2 -Constitucion' => [
  29. #       '101-41',
  30. #       '103-76',
  31. #       '101-41',
  32. #       '105-343',
  33. #       '107-3',
  34. #       '108-38',
  35. #       '109-11',
  36. #       '110-30',
  37. #       '111-34'
  38. #    ],
  39. #    '100022-Cliente1-Sucursal Principal' => [
  40. #       '101-6',
  41. #       '103-1',
  42. #       '104-2',
  43. #       '105-45',
  44. #       '108-6',
  45. #       '109-1',
  46. #       '110-8'
  47. #    ]
  48. #};
  49.  
  50.  
  51. # Consolidación
  52. while (my($clave,$valor_ref) = each %hash) {
  53.     $hash{$clave} = join q[-], @{$valor_ref};
  54. }
  55.  
  56. say Dumper \%hash;
  57.  
  58. # Es el mismo hash, pero ahora los valores son una cadena de caracteres, con la unión de todos los códigos
  59. #$VAR1 = {
  60. #    '100024-Cliente2 -Constitucion'      => '101-41-103-76-101-41-105-343-107-3-108-38-109-11-110-30-111-34',
  61. #    '100022-Cliente1-Sucursal Principal' => '101-6-103-1-104-2-105-45-108-6-109-1-110-8'
  62. #};
  63.  
  64. __END__
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: Recomponer un hash

Notapor rserrano » 2011-09-30 11:11 @508

Gracias por tu pronta respuesta.

Los datos ya se encuentran dentro de un hash que me lo devuelve la BD
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my %dataRow = $connection->DataHash();
  2. #esto lo hago solo para ver los valores
  3. print $dataRow{IdSucursalCliente}."-".$dataRow{Nombre}."-".$dataRow{Sucursal}."-".$dataRow{IdDenominacion}."-".$dataRow{Cantidad}."<br>";
  4.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


El resultado es la lista anterior mostrada.

Lo que tengo que consolidar son cuantas cantidades tiene cada sucursal.
Ejemplo
100022 Cliente1 Sucursal Principal 101=6 103=1-104=2-105=45-108=6-109=1-110=8
Interpretación: el cliente1 tiene 6 cantidades del código 101, 1 cantidad del código 103, etc....

A ver si me logro dar a entender.

Gracias.
rserrano
Perlero nuevo
Perlero nuevo
 
Mensajes: 7
Registrado: 2011-09-29 14:41 @653

Re: Recomponer un hash

Notapor panterozo » 2011-09-30 15:35 @691

No sé si haya algo que no se pueda hacer en Perl, quizás componer una sinfonía, pero el resto, yo creo se puede con Perl :p…

Saludos
panterozo
Perlero nuevo
Perlero nuevo
 
Mensajes: 160
Registrado: 2010-01-26 08:36 @400

Re: Recomponer un hash

Notapor rserrano » 2011-09-30 15:42 @696

Gracias, estoy intentando todavía, pero mi nivel es muy básico.

Saludos.
rserrano
Perlero nuevo
Perlero nuevo
 
Mensajes: 7
Registrado: 2011-09-29 14:41 @653

Re: Recomponer un hash

Notapor explorer » 2011-10-01 05:35 @274

Bueno, pues si el hash con los datos ya lo tienes, solo te queda ir creando el hash que recopile la información:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. push
  2.     @{ $hash{"$dataRow{IdSucursalCliente}-$dataRow{Nombre}-$dataRow{Sucursal}"} },
  3.         "$dataRow{IdDenominacion}-$dataRow{Cantidad}";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

y el resto es igual...
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: Recomponer un hash

Notapor rserrano » 2011-10-01 09:54 @454

explorer escribiste:Bueno, pues si el hash con los datos ya lo tienes, solo te queda ir creando el hash que recopile la información:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. push
  2.     @{ $hash{"$dataRow{IdSucursalCliente}-$dataRow{Nombre}-$dataRow{Sucursal}"} },
  3.         "$dataRow{IdDenominacion}-$dataRow{Cantidad}";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

y el resto es igual...



Gracias, explorer, sin duda voy a pasar a dar mi grano de arena en los donativos.

saludos-
rserrano
Perlero nuevo
Perlero nuevo
 
Mensajes: 7
Registrado: 2011-09-29 14:41 @653


Volver a Básico

¿Quién está conectado?

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