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 :

remplissage de table de hash ?!


Sujet :

Programmation et administration système Perl

  1. #1
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2018
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2018
    Messages : 17
    Points : 15
    Points
    15
    Par défaut remplissage de table de hash ?!
    Bonjour a tous,

    Voila mon problème, sur lequel je bute depuis quelques semaines.

    Dans un script, je lis un fichier texte généré par un ldap.
    Dans le flot d'information je dois ressortir un id associé a un "grade". Une problématique apparaît avec ce fichier car l'ordre de répétition n'est pas régulier. A chaque contact apparait soit : "idnumber" & "rank" ou "rank" & "idnumber".

    Mon idée est donc de créer un table de hashage où "idnumber" devient la clé et "rank" la valeur et à partir d'une boucle while d’implémenter cette table au fur et a mesure de la lecture du fichier texte.

    par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    while (my $line = <LIRE>){
    if ($line =~ m/(reg1)(reg2)/) {
    $idnumber = $2;
    } elsif ($line =~ m/(reg3)(reg4)/){
    $rank = $2;
    }else {
    say (VIDE "$line");
    }
    %ldap = ($idnumber => [$rank]);
    }
    avec ce bout de code est ce que j'ajoute une nouvel ensemble clé valeur ou est ce que j’écrase la dernière entrée.
    si ça n'ajoute pas comment faire ?

    Merci pour votre attention.

  2. #2
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    Bonjour

    est ce que j'ajoute une nouvel ensemble clé valeur ou est ce que j’écrase la dernière entrée.
    La ligne 9 dit que le hash ldap est maintenant un nouveau hash ne contenant qu'un couple dont la clé est $idnumber et la valeur est $rank avec des crochets (pourquoi avoir mis des crochets ? )

    si ça n'ajoute pas comment faire ?
    Le plus simplement du monde :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ldap{$idnumber}=$rank;
    Cette ligne veut dire : "dans le hash ldap, la valeur, dont la clé est $idnumber, est $rank".

    Est-ce ce que tu cherches ?
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2018
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2018
    Messages : 17
    Points : 15
    Points
    15
    Par défaut
    en fait ce que je cherche a faire c'est qu'a chaque ligne lue , si les conditions sont réalisées j'ajoute de nouvelles clés/valeur et non pas remplacer celles déjà crées.
    je vais tester ta solution ...
    En tout cas merci pour ta réponse rapide

  4. #4
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 278
    Points : 12 726
    Points
    12 726
    Par défaut
    Bonjour,

    Je n'ai pas tout compris:
    Est-ce qu'un idnumber peut avoir plusieurs rank ?

    Si oui, tu dois plutôt remplir un tableau pour chaque hash:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    use Data::Dumper;
    use strict;
    use warnings;
    my $idnumber="12345";
    my $rank=987 ;
    my %ldap;
    push(@{$ldap{$idnumber}},$rank);
    $rank=123;
    push(@{$ldap{$idnumber}},$rank);
    print Dumper(\%ldap);
    A l'execution, ça donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $VAR1 = {
              '12345' => [
                           987,
                           123
                         ]
            };
    Cordialement.

  5. #5
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 469
    Points
    12 469
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Flodelarab Voir le message

    La ligne 9 dit que le hash ldap est maintenant un nouveau hash ne contenant qu'un couple dont la clé est $idnumber et la valeur est $rank avec des crochets (pourquoi avoir mis des crochets ? )
    Pas exactement "$rank avec des crochets". Les crochets sont un constructeur de référence à un tableau, si bien que la valeur dans le nouveau hachage n'est pas la variable $rank entre crochets, mais une référence à un tableau anonyme (et oui, on se demande pourquoi avoir mis ces crochets).

    Exemple sous le debugger pour visualiser la structure créée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
      DB<1> $idnumber = 42
     
      DB<2> $rank = 36
     
      DB<3> %ldap = ($idnumber => [$rank]);
     
      DB<4> x \%ldap
    0  HASH(0x3773198)
       42 => ARRAY(0x3769a78)
          0  36
    On voit bien que pour la clef 42, le hachage contient une référence à un tableau anonyme (0x3769a78) contenant ub seul élément, le nombre 36.

    A part ce point, je suis d'accord avec le reste de ta réponse.

  6. #6
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2018
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2018
    Messages : 17
    Points : 15
    Points
    15
    Par défaut
    Merci pour l’intérêt que vous avez porté a ma question.
    effectivement il peut arriver que idnumber puisse avoir plusieurs rank (mais pas dans ce fichier) donc cette deuxième solutions m’intéresse également.
    Pour ce qui est de la faute avec les crochets, il s'agit d'une erreur de ma part en recopiant le bout de code, sur mon script il n'y en a pas

    en tout cas les solutions proposées fonctionnent et eje vous en remercie , je met le sujet en "résolu"
    Merci

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

Discussions similaires

  1. Table de hash limité ??
    Par elbrujo2323 dans le forum Langage
    Réponses: 14
    Dernier message: 17/01/2008, 21h32
  2. remplissage de table par VB
    Par Davik dans le forum Access
    Réponses: 14
    Dernier message: 11/05/2006, 16h10
  3. Problème d'ordre de remplissage de table
    Par matana dans le forum Langage SQL
    Réponses: 6
    Dernier message: 24/03/2006, 16h37
  4. Pb de remplissage de table avec ExecSql
    Par defluc dans le forum Bases de données
    Réponses: 1
    Dernier message: 26/06/2005, 18h31
  5. Tables de hash
    Par miss8 dans le forum C
    Réponses: 2
    Dernier message: 16/11/2002, 17h44

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