He aquí mi código Perl:
Using perl Syntax Highlighting
foreach my $key (keys %Summary ) {
print "Valor key leído de Summary: $key\n";
foreach my $readedreport (@reports)
{
print "Valor leído del array reports: $readedreport\n";
if ($key =~ /^$readedreport/) {
$reportName = $readedreport;
print "valor obtenido como reportName: $reportName"."\n";
}
}
$newSummary{ $reportName }{ $key } = $Summary{ $key };
}
print "Valor key leído de Summary: $key\n";
foreach my $readedreport (@reports)
{
print "Valor leído del array reports: $readedreport\n";
if ($key =~ /^$readedreport/) {
$reportName = $readedreport;
print "valor obtenido como reportName: $reportName"."\n";
}
}
$newSummary{ $reportName }{ $key } = $Summary{ $key };
}
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
- en @reports, tengo una lista de strings
- los $key leídos del hash %Summary, empiezan siempre por alguno de los strings de @reports (por ejemplo, para un $key='ELPREPOFFHash', existe un elemento $readedreport='ELPREPOFF' que es el que debo encontrar con mi código Perl).
Y ahora un extracto de esos prints, para que comprendais mi problema:
- Código: Seleccionar todo
Valor key leído de Summary: ELPREPOFFHash
Valor leído del array reports: OFFTOP
Valor leído del array reports: SQL
Valor leído del array reports: TIM
Valor leído del array reports: OFF
Valor leído del array reports: MOD
Valor leído del array reports: OFFREP
Valor leído del array reports: ELPREP
valor obtenido como reportName: ELPREP
Valor leído del array reports: ELPREPOFF
valor obtenido como reportName: ELPREPOFF
Valor leído del array reports: UNIX
Valor leído del array reports: Outbrs
Valor leído del array reports: ERR_STA_UIX
Valor leído del array reports: ERR_STA_UIS
Como comprenderéis, mi problema es que hay diversos elementos de @reports que hacen matching con el $key, y se queda con el último encontrado. En este caso, por pura casualidad, devuelve ELPREPOFF (en vez de ELPREP).
He intentado solucionar dicho problema de la forma siguiente:
Using perl Syntax Highlighting
foreach my $key (keys %Summary ) {
print "Valor key leído de Summary: $key\n";
foreach my $readedreport (@reports)
{
print "Valor leído del array reports: $readedreport\n";
if ( ($key =~ /^$readedreport/) && (length($readedreport) > $long) ) {
$reportName = $readedreport;
$long = length($reportName);
print "valor obtenido como reportName: $reportName"."\n";
}
}
$newSummary{ $reportName }{ $key } = $Summary{ $key };
$long = 0;
}
print "Valor key leído de Summary: $key\n";
foreach my $readedreport (@reports)
{
print "Valor leído del array reports: $readedreport\n";
if ( ($key =~ /^$readedreport/) && (length($readedreport) > $long) ) {
$reportName = $readedreport;
$long = length($reportName);
print "valor obtenido como reportName: $reportName"."\n";
}
}
$newSummary{ $reportName }{ $key } = $Summary{ $key };
$long = 0;
}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Es decir, agarrando siempre el de mayor longitud.
Quisiera saber si os parece bien este código, o si veis alguna forma de mejorarlo o de hacerlo más eficiente.
Muchas gracias por adelantado.
Explorer, efectivamente el mensaje anterior era ilegible y se me fue de las manos. El problema es que no he logrado borrar los mensajes escritos, únicamente editarlos así que he preferido abrir un hilo nuevo.
Un saludo a todos,
Felipe
¡¡¡¡Gracias!!!!
Felipe