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 :

HashTable contenant des listes


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné Avatar de yjuliet
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Août 2006
    Messages
    362
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Août 2006
    Messages : 362
    Par défaut HashTable contenant des listes
    BOnjour...

    J'ai besoin de regrouper plusieurs entrées d'un annuaire (l'équivalent d'une association SQL qui servirait à affecter des groupes à des utilisateurs) pour les mettre ensuite dans une seule entrée. Pour ce faire, je voulais utiliser des tables de hashage (pour référencer les affectactions par utilisateur) qui contiendrait des références vers les tableaux (ou éventuellement des tables de hashage aussi) qui contiendraient les identifiants de groupes.

    Voici donc ce que j'ai pondu (j'ai pas fait bcp de PERL dans ma vie)...
    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
     $result = $ldap->search( base=>$ATRIB_ROOT, scope=>$SCOPE, filter=>"(cn=*)", attrs=>['*']);
      $nbAffectations = $result->count;
      print "Entrées : " . $nbAffectations . "\n";
     
      @affectations = $result->entries;
      @ref = ();
      $i = 0;
      foreach $affectation (@affectations)
      {
      	$dnUser = $affectation->get_value("dnUser");
     
      	$dnGroupe = $affectation->get_value("dnGroupe");
     
    	if (exists $attribsHash{$dnUser}) {
    		print "Le user est déjà connu  : $dnUser\n";
    	    $ref[$i] = $attribsHash{ $dnUser };	    
      		@userGroupes = @{$ref};
      		$counter = @userGroupes;
      		print "Le user a déjà $counter groupes attribués\n";
    	} else {
    		@userGroupes = ();
    		print "Le user n'est pas encore connu : $dnUser\n";
    		$counter = 0;
    	}
      	push( @userGroupes, $dnGroupe );
      	$ref[$i] = \@userGroupes;
     
      	print "@userGroupes\n";
     
      	$attribsHash{$dnUser} = $ref[$i];
      	$i++;    
      }
    j'obtiens des résultats incorrects car je n'arrive pas à obtenir la bonne valeur dans counter ... et je n'arrive pas à comprendre pourquoi ...

    Merci d'avance pour vos idées, liens, conseils, ...

  2. #2
    Membre expérimenté Avatar de rcageot
    Profil pro
    rien
    Inscrit en
    Septembre 2006
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : rien

    Informations forums :
    Inscription : Septembre 2006
    Messages : 128
    Par défaut
    j'ai pas bien compris ce que tu voulais faire en fait et ton code sans commentaires n'est pas clair non plus !

  3. #3
    Membre chevronné Avatar de yjuliet
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Août 2006
    Messages
    362
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Août 2006
    Messages : 362
    Par défaut
    en fait, ce que je veux, c'est pour chaque User avoir une correspondance avec une liste de groupes, ce qu'en PHP je pourrais faire de la sorte :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $userGroupes = Array(
        "toto"=>Array(
            "groupe base",
            "groupe lambda"),
        "titi"=>Array(
            "groupe alpha"
            "groupe lambda")
    );
    en remplissant les différentes valeurs de mes "sous-tableaux" au fur et à mesure du parcours d'un tableau contenant les résultats de ma requete dans mon annuaire. (en SQL, j'aurais fait en gros un "SELECT user, groupe FROM association" pour obtenir cette liste).

    Pour ta solution du $#refTable, c'est pas mieux qu'avant, voire pire... il me retourne systématiquement 0...

  4. #4
    Membre chevronné Avatar de yjuliet
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Août 2006
    Messages
    362
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Août 2006
    Messages : 362
    Par défaut
    pour ceux qui auraient du mal à comprendre le début du code, voici l'entête du fichier pour voir les libs...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    use Net::LDAP;
    use Net::LDAP::Util qw(ldap_error_name);
    use Net::LDAP::Constant qw(LDAP_COMPARE_TRUE LDAP_COMPARE_FALSE);

  5. #5
    Membre Expert
    Avatar de Woufeil
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 1 076
    Par défaut
    Bonjour.

    Tout d'abord, un conseil : évite de faire du PHP en Perl
    C'est à dire que je te conseille vivement d'utiliser le pragma strict qui t'oblige à déclarer tes variables à l'avance, je trouve que c'est quand même beaucoup plus clair. Ensuite, je sais que les concaténations avec echo sont conseillées avec PHP, mais ce n'est pas le cas du print de Perl.

    Maintenant, passons à ton problème : que veux tu obtenir dans ta variable $counter ? Dans le cas présent, si le if est vrai $counter contient le nombre d'élement de @usergroups, et sinon il contient 0, jusque là pas de problèmes. Mais là où j'ai du mal, c'est avec la ligne @userGroupes = @{$ref};, en effet c'est quoi $ref ? C'est la première appariton de cete variable dans le listing. Si l'erreur est là, un use strict t'aurait indiqué te l'aurait indiqué...

    Sinon, détaille plus ton problème.

  6. #6
    Membre chevronné Avatar de yjuliet
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Août 2006
    Messages
    362
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Août 2006
    Messages : 362
    Par défaut
    Merci, je vais voir en mode strict ...

    Pour ce qui est de l'utilisation de PHP, promis, j'en mettrai plus (ou du moins j'essaierai d'éviter) dans la rubrique PERL ... c'était juste parce que je savais ce que je voulais "modéliser" mais que je ne savais pas comment le réaliser en PERL...
    Pour l'utilisation du @{$ref}, c'est une erreur ... éventuellement, @{$ref[$i]} aurait été moins faux dans le contexte du code ..

    J'essaye et je vous tiens au courant ...

  7. #7
    Membre chevronné Avatar de yjuliet
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Août 2006
    Messages
    362
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Août 2006
    Messages : 362
    Par défaut
    Merci, cette solution fonctionne "à merveille".


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

Discussions similaires

  1. Réponses: 0
    Dernier message: 01/12/2010, 16h34
  2. MVVM et Binding d'objets contenant des listes d'objets
    Par Tanous dans le forum Windows Presentation Foundation
    Réponses: 5
    Dernier message: 21/07/2010, 14h01
  3. Liste contenant des listes
    Par cyrux dans le forum Merise
    Réponses: 4
    Dernier message: 23/06/2010, 09h17
  4. Transformation de champs contenant des listes d'ID
    Par bastoonet dans le forum Alimentation
    Réponses: 0
    Dernier message: 28/01/2009, 14h55
  5. [castor] MappingTool objet contenant des list
    Par totoranky dans le forum Persistance des données
    Réponses: 1
    Dernier message: 28/03/2007, 17h48

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