IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Perl Discussion :

Hash of anonymous hashes : probleme avec une key/pair


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Inscrit en
    Février 2012
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Février 2012
    Messages : 3
    Par défaut Hash of anonymous hashes : probleme avec une key/pair
    Bonjour tout le monde,

    J'ai un probleme avec bout de code et je n'arrive pas a en comprendre la raison. J'ai une clé unqiue de hash qui est recrée en permanance et je ne sais pas pourquoi. Si quelqu'un a une idee, ce serait super


    %ulm_msg : Juste des data TAG=VALEUR| - un exemple dans ci-dessous.
    @ulm_tags : contient MSGTYPE GCCI.PRODUCT.FLOW EXECSERVPRODUCT

    Toutes les autres valeurs sont initialisées dans le code ci-dessous:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    # Creation of a hash of anonymous hash
    # Model is : KeyTag => { KeyVal => Frequency }
    # Example:	35 => { D => 10 }
    #			35 => { G => 3 }
    foreach $h_tag (@ulm_tags){
    	$ulm_keys{$h_tag}{"FAKE"} = "FAKE";
    	# [ULM TAGS]: [ MSGTYPE | GCCI.PRODUCT.FLOW | EXECSERVPRODUCT ]
    	# %ULM KEYS: GCCI.PRODUCT.FLOW => { 1 => 1 }
    	# %ULM KEYS: MSGTYPE => { 1 => 1 }
    }
     
    # Populating the hash of anonymous hash
    while (($key, $value) = each(%ulm_msg)) {
    	foreach $h_tag (keys %ulm_keys) {
    		if($value =~ /$h_tag/){
    			$value =~ /\|$h_tag=([^|]*)/;
    			$h_val = $1;
    			printf "\nh_tag:h_val => ".$h_tag.":".$h_val."\n";
    			if(exists $ulm_keys{$h_tag}{$h_val}){
    				$ulm_keys{$h_tag}{$h_val} => $ulm_keys{$h_tag}{$h_val}++;
    				printf "Incrementing a hash entry: ".$h_tag.":".$h_val."=>".$ulm_keys{$h_tag}{$h_val}."\n";
    			}
    			else{
    				$ulm_keys{ $h_tag } = {
    					$h_val  => 1,
    				};
    				printf "Adding a new hash entry: ".$h_tag.":".$h_val."=>".$ulm_keys{$h_tag}{$h_val}."\n";
    				if($h_val eq "AQUA"){
    					printf "ULM: ".$value."\n";
    				}
    			}
    		}
    	}
    }
     
    # Display the Hash
    printf "\n\nHASH OF HASH\n\n";
    for $h_tag ( keys %ulm_keys ) {
    	print "$h_tag: ";
    	for $h_val ( keys %{ $ulm_keys{$h_tag} } ) {
    		print "$h_val=$ulm_keys{$h_tag}{$h_val} ";
    	}
    	print "\n";
    }
    Ce bout de conde semble fonctionner parfaitement, a une exception pret. Pour la key EXECSERVPRODUCT la ligne suivante semble ne pas fonctionner :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(exists $ulm_keys{$h_tag}{$h_val}){....
    Visiblement le resultat est false ce qui implique qu'on ecrase la key/pair. Mais je ne comprend pas pourquoi.
    Ci-dessous un extrait de l'output du script, ca peut aider pour trouver le probleme et comprendre comment les variables sont remplies.

    h_tag:h_val => MSGTYPE:new
    Incrementing a hash entry: MSGTYPE:new=>12

    h_tag:h_val => EXECSERVPRODUCT:ARID
    Adding a new hash entry: EXECSERVPRODUCT:ARID=>1

    h_tag:h_val => GCCI.PRODUCT.FLOW:ATS
    Incrementing a hash entry: GCCI.PRODUCT.FLOW:ATS=>13

    h_tag:h_val => MSGTYPE:new
    Incrementing a hash entry: MSGTYPE:new=>13

    h_tag:h_val => EXECSERVPRODUCT:TWAP
    Adding a new hash entry: EXECSERVPRODUCT:TWAP=>1

    h_tag:h_val => GCCI.PRODUCT.FLOW:ATS
    Incrementing a hash entry: GCCI.PRODUCT.FLOW:ATS=>14

    h_tag:h_val => MSGTYPE:new
    Incrementing a hash entry: MSGTYPE:new=>14

    h_tag:h_val => EXECSERVPRODUCT:CLOSE
    Adding a new hash entry: EXECSERVPRODUCT:CLOSE=>1

    h_tag:h_val => GCCI.PRODUCT.FLOW:ATS
    Incrementing a hash entry: GCCI.PRODUCT.FLOW:ATS=>15

    h_tag:h_val => MSGTYPE:new
    Incrementing a hash entry: MSGTYPE:new=>15

    h_tag:h_val => EXECSERVPRODUCT:AQUA
    Adding a new hash entry: EXECSERVPRODUCT:AQUA=>1
    ULM: 8=FIX.4.2|9=898|35=UL|49=EMC01|56=EMSECS|34=6007|52=20120221-09:59:47|212=831|#EXDESTINATION=L|#GCCI.PRODUCT.EXECUTION_REGION=EMEA|#GCCI.PRODUCT.EXECUTION_SUB_REGION=EMEA|#IDSOURCE=5|#ONBEHALFOFCOMPID=P2|#SECURITYID=VOD.L|#SYMBOL=VOD.L|CLORDID=GGPHCJP9459dd|CREATIONTIME=20120221095947|EXDESTINATION=L|EXECSERVPRODUCT=AQUA|GCCI.CLIENT.COMPID=P2|GCCI.CLIENT.FIXSESSION=TEST_|GCCI.INSTRUMENT.REUTERS_EXCHANGE=L|GCCI.PRODUCT.EXECUTION_REGION=EMEA|GCCI.PRODUCT.EXECUTION_SUB_REGION=EMEA|GCCI.PRODUCT.FLOW=ATS|HANDLINST=care|MSGTYPE=new|ONBEHALFOFCOMPID=P2|ORDERQTY=1|ORDSTATUS=pendingnew|ORDTYPE=market|PLUGINORIGINATOR=TEST__GEN|PLUGINOWNER=TEST__GEN|RICCODE=VOD.L|ROOTCLIENTORDERID=JP9459dd|SENDERCOMPID=TEST_|SIDE=buy|SYMBOL=VOD.L|TARGETCOMPID=_|TIMEINFORCE=day|TRANSACTTIME=20120221095945806|ULFROMSESSIONNAME=TEST__GEN|ULTOSESSIONNAME=PULM_EMC01_EMSECS||10=219|

    h_tag:h_val => GCCI.PRODUCT.FLOW:ATS
    Incrementing a hash entry: GCCI.PRODUCT.FLOW:ATS=>16

    h_tag:h_val => MSGTYPE:new
    Incrementing a hash entry: MSGTYPE:new=>16

    h_tag:h_val => EXECSERVPRODUCT:TWAP
    Adding a new hash entry: EXECSERVPRODUCT:TWAP=>1

    h_tag:h_val => GCCI.PRODUCT.FLOW:ATS
    Incrementing a hash entry: GCCI.PRODUCT.FLOW:ATS=>17

    h_tag:h_val => MSGTYPE:new
    Incrementing a hash entry: MSGTYPE:new=>17

    h_tag:h_val => EXECSERVPRODUCT:AQUA
    Adding a new hash entry: EXECSERVPRODUCT:AQUA=>1
    ULM: 8=FIX.4.2|9=898|35=UL|49=EMC01|56=EMSECS|34=6009|52=20120221-09:59:47|212=831|#EXDESTINATION=L|#GCCI.PRODUCT.EXECUTION_REGION=EMEA|#GCCI.PRODUCT.EXECUTION_SUB_REGION=EMEA|#IDSOURCE=5|#ONBEHALFOFCOMPID=_P4|#SECURITYID=VOD.L|#SYMBOL=VOD.L|CLORDID=GGPHCJP9461dd|CREATIONTIME=20120221095947|EXDESTINATION=L|EXECSERVPRODUCT=AQUA|GCCI.CLIENT.COMPID=_P4|GCCI.CLIENT.FIXSESSION=TEST_|GCCI.INSTRUMENT.REUTERS_EXCHANGE=L|GCCI.PRODUCT.EXECUTION_REGION=EMEA|GCCI.PRODUCT.EXECUTION_SUB_REGION=EMEA|GCCI.PRODUCT.FLOW=ATS|HANDLINST=care|MSGTYPE=new|ONBEHALFOFCOMPID=_P4|ORDERQTY=1|ORDSTATUS=pendingnew|ORDTYPE=market|PLUGINORIGINATOR=TEST__GEN|PLUGINOWNER=TEST__GEN|RICCODE=VOD.L|ROOTCLIENTORDERID=JP9461dd|SENDERCOMPID=TEST_|SIDE=buy|SYMBOL=VOD.L|TARGETCOMPID=|TIMEINFORCE=day|TRANSACTTIME=20120221095945806|ULFROMSESSIONNAME=TEST__GEN|ULTOSESSIONNAME=PULM_EMC01_EMSECS||10=213|


    HASH OF HASH!

    GCCI.PRODUCT.FLOW: ATS=17
    MSGTYPE: new=17
    EXECSERVPRODUCT: AQUA=1
    Comme vous pouvez le constater la key/pair => EXECSERVPRODUCT:AQUA est recrée plus d'une fois. les autres key/pairs sont bonnes.

    Si quelqu'un a une idée du pourquoi, du comment, je suis prenneur !
    Merci d'avance

  2. #2
    Candidat au Club
    Inscrit en
    Février 2012
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Février 2012
    Messages : 3
    Par défaut
    Et juste pour information j'ai essaye la ligne suivante sans succes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(exists $ulm_keys{$h_tag} && defined $ulm_keys{$h_tag}{$h_val}){

  3. #3
    Candidat au Club
    Inscrit en
    Février 2012
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Février 2012
    Messages : 3
    Par défaut
    Resolu, il s'agissait d'un probleme de reference.

    Remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     $ulm_keys{ $h_tag } = {
    	$h_val  => 1,
     };
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ulm_keys{$h_tag}{$h_val}=1;

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. PROBLEME AVEC UNE TABLE INTERBASE
    Par barro dans le forum InterBase
    Réponses: 1
    Dernier message: 22/09/2004, 08h16
  2. [C#] [Oracle] Probleme avec une procedure stockée
    Par sronin1 dans le forum Accès aux données
    Réponses: 4
    Dernier message: 28/05/2004, 19h04
  3. Probleme avec une table vide
    Par king dans le forum Bases de données
    Réponses: 5
    Dernier message: 20/03/2004, 14h24
  4. au secour probleme avec une requete...
    Par soufiane59 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 26/09/2003, 10h28
  5. probleme avec une division par zéro
    Par jcharleszoxi dans le forum Langage SQL
    Réponses: 2
    Dernier message: 26/03/2003, 18h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo