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 :

Probleme Hash, valeur manquant


Sujet :

Langage Perl

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 88
    Points : 70
    Points
    70
    Par défaut Probleme Hash, valeur manquant
    Bonjour,

    Je n'arrive pas a savoir pourquoi j'ai perdu des valeurs entre-temps.


    my $reffree = [
    'rootdg : ',
    'rootdisk (c0t8d0) = 42.33 Go Free ',
    'rootmirror (c1t8d0) = 42.33 Go Free ',
    'Total 84.66 libre / 26.01 Go utile / 136.69 Go Brut ',
    'appsdg : ',
    'appsdg01 (AKR_0574_0) = 2.84 Go Free ',
    'appsdg02 (AKR_0621_0) = 2.84 Go Free ',
    'Total 5.68 libre / 13.79 Go utile / 33.26 Go Brut ',
    'perldg : ',
    'perldg01 (AKR_0574_3) = 0.54 Go Free ',
    'perldg02 (AKR_0621_3) = 0.54 Go Free ',
    'perldg03 (AKR_0574_4) = 0.58 Go Free ',
    'perldg04 (AKR_0621_4) = 0.46 Go Free ',
    'perldg05 (AKR_0574_1) = 7.48 Go Free ',
    'perldg06 (AKR_0621_1) = 7.48 Go Free ',
    'perldg07 (AKR_0574_2) = 0.00 Go Free ',
    'perldg08 (AKR_0621_2) = 0.00 Go Free ',
    'perldg09 (AKR_0574_5) = 0.00 Go Free ',
    'perldg10 (AKR_0621_5) = 0.00 Go Free ',
    'Total 17.07 libre / 326.54 Go utile / 665.33 Go Brut ',
    ] ;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    foreach ( @$reffree )
    {
            next if ( $_ =~ /^c/ || $_ =~ /root/ || $_ =~ /Total/ || $_ =~ /^$/ ) ;
            if ( $_ =~ /\w+ :/ )
            {
                    ($dgname) = ( $_ =~ /(\w+) :/ ) ;
                    next ;
            }
     
            ($diskname,$diskemc,$diskfree) = ( $_ =~ /(\w+) \((.+)_.* = (.+) Go Free/ ) ;
            print "$diskname $diskemc $diskfree \n";
            $refdg->{$dgname}->{$diskemc}->{$diskfree} = $diskname  ;
    }
    Résultat, je n'ai pas les deux valeurs attendu perldg07, perldg08 dans le hash.
    Pourriez vous m'expliquer pourquoi, et comment je pourrais remplir correctement mon hash. Merci


    $VAR1 = {
    'perldg' => {
    'AKR_0574' => {
    '7.48' => 'perldg05',
    '0.58' => 'perldg03',
    '0.00' => 'perldg09',
    '0.54' => 'perldg01'
    },
    'AKR_0621' => {
    '0.46' => 'perldg04',
    '7.48' => 'perldg06',
    '0.00' => 'perldg10',
    '0.54' => 'perldg02'
    }
    },
    'appsdg' => {
    'AKR_0574' => {
    '2.84' => 'appsdg01'
    },
    'AKR_0621' => {
    '2.84' => 'appsdg02'
    }
    }
    };


  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
    Citation Envoyé par aikinhdo
    Résultat, je n'ai pas les deux valeurs attendu perldg07, perldg08 dans le hash.
    Pourriez vous m'expliquer pourquoi, et comment je pourrais remplir correctement mon hash. Merci
    Un hash ne peut pas avoir deux clés identiques, si tu affectes deux fois à la même clé, la dernière affectation écrase la précédente... Par exemple ici il y avait plusieurs disque avec 7.48 Go de libre.
    Si tu veux avoir plusieurs valeurs pour une même clé, il vaut mieux mettre une référence de tableau comme valeur, et effectuer des push dessus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    foreach ( @$reffree )
    {
            next if ( $_ =~ /^c/ || $_ =~ /root/ || $_ =~ /Total/ || $_ =~ /^$/ ) ;
            if ( $_ =~ /\w+ :/ )
            {
                    ($dgname) = ( $_ =~ /(\w+) :/ ) ;
                    next ;
            }
     
            ($diskname,$diskemc,$diskfree) = ( $_ =~ /(\w+) \((.+)_.* = (.+) Go Free/ ) ;
            print "$diskname $diskemc $diskfree \n";
            push @{$refdg->{$dgname}->{$diskemc}->{$diskfree}}, $diskname  ;
    }
    --
    Jedaï

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 88
    Points : 70
    Points
    70
    Par défaut
    Bonjour,

    Merci beaucoup.

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

Discussions similaires

  1. probleme affichage valeur hash
    Par Isabella83 dans le forum Langage
    Réponses: 1
    Dernier message: 19/03/2012, 14h50
  2. Probleme sur valeur
    Par Cablan dans le forum Access
    Réponses: 1
    Dernier message: 22/12/2005, 10h56
  3. probleme recup valeur de checkboxes
    Par gyouk dans le forum ASP
    Réponses: 11
    Dernier message: 07/12/2005, 23h41
  4. probleme de valeur retournée et seg fault
    Par florent_de_brest dans le forum C
    Réponses: 5
    Dernier message: 04/12/2005, 16h28
  5. []probleme affichage valeur dans combobox
    Par gup dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 23/09/2005, 09h22

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