• Publicidad

Hashes anidados

¿Ya sabes lo que es una referencia? Has progresado, el nível básico es cosa del pasado y ahora estás listo para el siguiente nivel.

Hashes anidados

Notapor Sombrerero_Loco » 2008-12-04 09:53 @453

He decido modificar la pregunta porque no llevaba a ningún lugar.
Pero en vez de aquello, tengo esto:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#Query que queremos que se ejecute, actualmente coge todos los valores que nos interesan y preparamos la conexión
# Hay que cambiar el número de la primera parte de la select con el valor del fichero de control
# donde el número debe de ir $sinc: desactivado para debug---------------------------------------------------->>|::::::::::|
my $sql1 = qq(select service_name, datetime, severity, end_datetime from OPC_SERVICE_LOG where DATETIME between 1227692768 AND $flag_mon_file );
my $sth = $dbh->prepare($sql1) or die "No he podido ejecutar la sentencia\n";

# Preparamos la select entre el tiempo del fichero de control y el tiempo local de la máquina
# my($SERVICE_NAME);
$sth->execute();

# Realizamos el fetch de cada línea de la select y si no tiene tiempo de finalización, lo ponemos a 0, que significa
# que sigue vigente la caída de servicio (hay que definir esto)
while (($service_name,$datetime, $severity, $end_datetime) = $sth->fetchrow_array) {
    if (!$end_datetime) {
        $end_datetime = $datetime
    }
    $serv_status{$service_name}{$severity} = $serv_status{$service_name}{$severity} + ($end_datetime - $datetime);
}

# SOLO PARA DEBUG, IMPRIME TODO LO QUE ME DEVUELVE EL HASH
foreach $service ( keys %serv_status ) {
    print "Servicio $service: \n";
    foreach $severity ( keys %{$serv_status{$service}} ) {
        print "\tSEVERIDAD: $severity VALOR: $serv_status{$service}{$severity}\n";
    }
}

########################################################
#SISTEMA DE "MARCA DE AGUA" Y CRITICIDADES POR SERVICIO#
########################################################

foreach $id (keys (%serv_status)) {
    print "Servicio $id\n";
    foreach $control(@warning) {
        $srvtable{$service_name}{'warning'} = $final{$service_name}{'warning'} + $serv_status{$service_name}{$severity}
    }
}
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4


Esto último en sistema de marca de agua, como veis estoy equiparando un valor en el hash
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$srvtable{$service_name}{'warning'}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
a su mismo valor MÁS un valor de otro hash -->
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$final{$service_name}{'warning'} + $serv_status{$service_name}{$severity}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


La cuestión, se me queda el PC frito, se tira procesando la vida... y me pregunto ¿es una burrada lo que estoy haciendo? Si no, ¿cómo debo de hacerlo?, porque quiero que me asigne ese valor de ese hash como valor de la key del otro...

¡Gracias!
Sombrerero_Loco
Perlero nuevo
Perlero nuevo
 
Mensajes: 42
Registrado: 2008-11-11 11:20 @514

Publicidad

Notapor explorer » 2008-12-04 14:38 @651

Hay errores en la última parte, en el último bucle foreach():
* No usas para nada la variable $id, salvo imprimirle
* No usas para nada la variable $control
* No está claro de dónde viene el valor de $service_name
* No está claro de dónde viene el valor de $severity
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Intermedio

¿Quién está conectado?

Usuarios navegando por este Foro: Bing [Bot] y 1 invitado

cron