• Publicidad

Pequeño problema bucle

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

Pequeño problema bucle

Notapor fgalves » 2006-10-18 06:36 @317

Hola a todos,
He aquí mi código Perl:

Sintáxis: [ Descargar ] [ Ocultar ]
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 };
    }
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:

Sintáxis: [ Descargar ] [ Ocultar ]
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;
    }  
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
fgalves
Perlero nuevo
Perlero nuevo
 
Mensajes: 210
Registrado: 2006-09-25 13:54 @621

Publicidad

Notapor explorer » 2006-10-18 10:41 @487

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
foreach my $key (keys %Summary ) {
    print "Valor key leído de Summary: $key\n";
    $long = 0;
    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 };
}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


A mí me parece bien. Lo único poner la inicialización de $long antes de entrar en el bucle.
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Básico

¿Quién está conectado?

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

cron