Ver Mensaje Individual
  #2 (permalink)  
Antiguo 17/06/2008, 13:53
jferrero
Colaborador
 
Fecha de Ingreso: mayo-2006
Ubicación: Valladolid
Mensajes: 525
Antigüedad: 18 años, 9 meses
Puntos: 11
Respuesta: Generar Reportes para queries : Perl pros :

Código:
#!/usr/bin/perl
use warnings;
use strict;

my @data = (
#         codigo talla color cantidad
    [ qw( PA-200 11    Azul  1   ) ],
    [ qw( PA-200 14    Azul  24  ) ],
    [ qw( PA-200 12    Negro 18  ) ],
    [ qw( PA-200 13    Negro 8   ) ],
    [ qw( PA-200 14    Negro 106 ) ],
    [ qw( PA-200 15    Negro 17  ) ],
    [ qw( PA-200 17    Negro 75  ) ],
);

print 'Introduzca el código:';
chomp(my $codigo_a_sacar = <>);

my %resultados;
my %tallas;

# Recogida de datos
foreach my $fila ( @data ) {
    my ($data_codigo,$data_talla,$data_color,$data_cantidad) = @$fila;
    next if $data_codigo ne $codigo_a_sacar;

    $resultados{$data_color}{$data_talla} = $data_cantidad;
    $tallas{$data_talla} = 1;
}

# Salida
print join q{|}, q{ }x8, map { sprintf " %2d ", $_ } sort keys %tallas;
print "\n";
print join q{+}, q{ }x8, map { '----' } 1 .. scalar keys %tallas;
print "\n";
foreach my $color ( sort keys %resultados ) {
    printf "%-8s|", $color;
    foreach my $talla ( sort keys %tallas ) {
        my $dato = $resultados{$color}{$talla} || 0;
        printf "%3d  ", $dato;
    }
    print "\n";
}

__END__
La salida es:
Código:
Introduzca el código:PA-200
        | 11 | 12 | 13 | 14 | 15 | 17
        +----+----+----+----+----+----
Azul    |  1    0    0   24    0    0
Negro   |  0   18    8  106   17   75

Última edición por jferrero; 17/06/2008 a las 17:23