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

Programmation et administration système Perl Discussion :

Récuperer valeur d'une clé dans une fonction


Sujet :

Programmation et administration système Perl

  1. #1
    Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    103
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 103
    Points : 57
    Points
    57
    Par défaut Récuperer valeur d'une clé dans une fonction
    bonjour tous le monde,

    Je voudrais savoir commnent récupérer la valeur d'une clé provenant d'un hash (SpecRef) sachant que je suis dans une fonction :
    voici mon code, enfin un morceau :

    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
    45
    46
    47
    48
    49
    50
     
    foreach $linekmtn (@$KMTN)
            {
            	# -- One specie
     
                    if ($linekmtn =~ /^\s#(\d+)#\s(\d.+)\s\{(\w.+)\}/)
                    {
                            next unless exists ($SpecRef->{$1});
                            ($specie1, $val, $compound) = ($1, $2, $3);
     
     
                            foreach $data (@$allfile)
                            {
                                    chomp $data;
                                    next unless ($data =~ m/^(\d+\.\d+\.\d+\.\d+)\t(\w.+)\t(\w.+)\tc\t/i);
                                    next if $1 ne $numEC;
     
                                    ($valEC, $NameReact, $Equation) = ($1, $2, $3);
     
                                    $da2 = $data;
                                    $da2 =~ s/^\d+\.\d+\.\d+\.\d+\t\w.+\t\w.+\tc\t//gi;
     
                                    foreach $ligne (split /;/, $da2)
                                    {
                                            ($shortC,$nameC,$formulaC) = split (/\t/,$ligne);
     
     
                                            next if (($nameC eq $duplicateN) && ($val eq $duplicateV));
     
                                            &Product_Substrate($R_D,$R_Ins,$nameC,$formulaC); #envoie sur la base pour table product ou substrat
     
     
     
                                            if ($nameC eq $compound)
                                            {
     
                                                   #  &Reaction_Prod_Sub($R_D2,$R_Ins2,$Equation,$NameReact,$nameC,$formulaC);
                                                    print FIL "\n  $specie1 : $compound : $val" ;
                                                    $duplicateN = $nameC;
                                                    $duplicateV = $val;
     
                                                    #-------condition-------#
     
                                                    # deux conditions pour la meme espece
                                                    if ($linekmtn =~ /^\s\#(\d+)\#\s(\d.*)\s\{(\w.*)\}\s\s\(\#\d+\#\s(\w.+)\<\d+\>\;\s\#\d+\#\s(\w.+)\<\d+\>\)\s/)
                                                    {
                                                            $condition=$4.$5;
                                                            print FIL (" - $condition");
                                                            &R_KMP ->execute ($val,$condition,($SpecRef{$specie1}),$nameC,$formulaC);
                                                    }

    et lors de l'appel de ma requete j'ai besoin de la valeur de la clé, j' ai déjà utilisé cette syntaxe : $hash{$key} pour récupérer la valeur d'une clé , et ca marchait très bien jusqu'à présent... je pense qu'il s'agit d'une erreur toute bête mais je l'a trouve pas..
    et j'ai bien évidemment déclaré tous ce qui est nécessaire..

  2. #2
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    D'un côté tu as :
    ce qui semble indiquer que $SpecRef est une référence sur un hash (vu le nom... on aurait pu s'en douter)
    et de l'autre :
    Cette seconde écriture consulte le hash %SpecRef, pas le hash contenu par la référence $SpecRef... Je doute que ce soit ton intention.

    Si tu avais utilisé le pragma "strict", cette erreur t'aurait été signalé sans ambiguité.

    --
    Jedaï

  3. #3
    Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    103
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 103
    Points : 57
    Points
    57
    Par défaut
    j 'utilise use strict, et oui effectivement l'erreur m'a été signalée, mais je ne sais pas comment récuperer la valeur associée à la clé specie1.

    d'habitude j'utilise une boule qui parcourt mon hash et qui recupere la valeur que je veux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    foreach $k (sort keys %$SpecRef)
                            {
                                    if ($specie1 eq $k)  
                                    {
                                          $NameOrga = $SpecRef{specie1);
                                    }
                            }
    mais la je ne veux pas utiliser cette méthode je ne veux pas réouvrir une autre boucle, j'aimerais savoir si il y a une autre façon de faire

  4. #4
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Tu devrais réviser tes structures de données en Perl. Ce que je ne comprends pas bien c'est que tu ais la structure correcte à un endroit et que tu sois incapable de la réappliquer à un autre, même si je te la remontre...
    --
    Jedaï

  5. #5
    Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    103
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 103
    Points : 57
    Points
    57
    Par défaut
    oki merci..
    je revois mes structures...

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 25/03/2011, 18h29
  2. Réponses: 7
    Dernier message: 25/03/2011, 10h52
  3. Réponses: 4
    Dernier message: 15/10/2009, 13h33
  4. [XL-2007] Afficher une checkbox dans une feuille si une checkbox d'une autre feuille est cochée
    Par JessieCoutas dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/08/2009, 13h35
  5. Envoyer une formulaire dans une page dans une Frame
    Par zooffy dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 29/06/2007, 10h13

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