Buenas.
Estoy aprendiendo Perl desde hace poco tiempo, y la verdad, me queda mucho camino. Tengo un ejercicio que estoy atascado y me gustaría si no es mucha molestia que me ayudarais de la mejor manera posible.
Tengo un programa sencillo donde me conecto a una base de datos. Realizo una consulta sencilla y lo que me devuelve lo introduzco en un Excel a modo de tabla.
Ahora tengo que crear una segunda tabla donde me muestre la cuenta de las filas obtenidas en la consulta.
Me explico mejor: la consulta me devuelve formas y colores. Por ejemplo: estrella-roja, estrella-azul, circulo-verde, circulo-azul, triangulo-rojo, triangulo-azul. Con esos datos que obtengo tengo que crear una tabla donde las filas sean las formas y las columnas los colores y contar las veces que aparecen esas combinaciones. Si no aparecen (por ejemplo, triangulo-verde), no se pone.
Solo las que aparezcan en la consulta, la suma de los números de la tabla tiene que ser el mismo que el número de registros de la consulta.
Hasta donde tengo realizado es hasta esta última parte, y la verdad, no sé cómo seguir. Quiero poner un
hash con dos claves (forma y color) y un valor, pero me lío bastante y me bloqueo. Tampoco sé si es la mejor forma o la más sencilla.
Os copio lo que tengo hasta ahora a ver si alguien me pudiese ayudar.
Muchas gracias.
Using perl Syntax Highlighting
#!/usr/bin/perl -w
use strict;
use warnings;
use Spreadsheet::WriteExcel;
use Excel::Writer::XLSX;
use DBI;
use FileHandle;
use DBD::Teradata;
my ($dbh,$sthformas,$filename);
my (@forma,@color);
$dbh = DBconnect(); #me conecto a la bbdd
my $query = qq[
SELECT
Forma,
color
FROM
TABLA
];
$sthformas = $dbh->prepare($query);
$filename="pepe.xlsx";
open my $fh, '>', $filename or die;
my $workbook = Excel::Writer::XLSX->new($fh);
my $formato = $workbook->add_format();
$formato->set_bold();
$formato->set_color('#000000');
$formato->set_align('center');
$formato->set_bg_color('#FFD700');
$formato->set_font('Arial');
$formato->set_border(1);
$formato->set_size(8);
my $pestaña = $workbook->add_worksheet("Pepe");
my @row2 = ( 'FORMA','COLOR');
$pestaña->write_row( 0, 0, \@row2 ,$formato);
$sthformas->execute();
while(my $ref = $sthformas->fetchrow_hashref) {
my($forma, $color) = ($ref->{forma},$ref->{color});
$forma =~ s/\s+$//;
$color =~ s/\s+$//;
push (@forma,$forma);
push (@color, $mes);
}
$pestaña->write_col(1, 0, \@forma,$formato);
$pestaña->write_col(1, 1, \@color,$formato);
#escribo los resultados de mi query en la excel.
my @color = sort(@color);
my @color_unico;
my $i=0;
$color_unico[0] = $color[0];
foreach my $item(@color) {
unless($item eq $color_unico[$i]) {
push(@color_unico,$item);
$i++;
}
}
# me creo un array con los únicos para meterlos en la tabla 2.
my @forma = sort(@forma);
my @forma_unico;
my $j=0;
$forma_unico[0] = $forma[0];
foreach my $item2(@forma) {
unless($item2 eq $forma_unico[$j]) {
push(@forma_unico,$item2);
$j++;
}
}
#### INTRODUCIR TABLA 2
$pestaña->write_col(2,6,\@color_unico,$formato);
$pestaña->write_row(1,7,\@forma_unico,$formato);
$workbook -> close();
Coloreado en 0.005 segundos, usando
GeSHi 1.0.8.4