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 :

Creer une hash contenant un tableau


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2006
    Messages
    27
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2006
    Messages : 27
    Par défaut Creer une hash contenant un tableau
    Bonjour/Bonsoir,
    Je viens de commencer le perl et je dois concevoir une application dans laquelle je suis ammené à concevoir une hash dans laquelle se situe un tableau.
    Après quelques recherches sur internet j'ai lu qu'une hash ne peut contenir qu'un scalaire donc j'ai procédé comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    my %group = ();
    #rajout du groupe aux données disponibles
    my $groupname = @{$k}[0]; #Cette ligne est initialisee en dehors de ce bout de code
    for(my $i=0; $i < scalar(@{$k}); $i = $i+2)
    {
        my $sub_groupname =  @{$k}[$i];
        my @tab = ();
        if(defined($group{$sub_groupname}))   
             {@tab=@{$group{$sub_groupname}};}
        push @tab, ${$k}[$i+1];
        $group{$sub_groupname} = \@tab;
    }
    Mon probleme est que la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $group{$sub_groupname} = \@tab;
    ne mémorise que la derniere valeur comme si le programme ne tenait pas compte du tableau.

    Pouvez vous me fournir une solution a ce problème s'il vous plait?
    Je vous remercie.

  2. #2
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    Concrètement, que souhaites tu faire ?
    Car ton code est vraiment pas bien écrit.

  3. #3
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2006
    Messages
    27
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2006
    Messages : 27
    Par défaut
    Salut,

    Je suis conscient que mon code doit être vraiment horrible. Comme je le disais j'ai commencé le perl il y a une semaine car je dois réaliser une application basée sur ce langage.

    Concrètement je souhaite mettre en place cette structure :

    hash_map
    |________hash_map
    |_________tableau
    la partie:

    hash_map
    |________hash_map
    à déja été réalisée. Mon probleme survient quand je tente d'ajouter le tableau à la seconde hash map. Il considère mon tableau comme une simple valeur, du coup les seules les dernières données rencontrées sont enregistrées.

    pour résumer je souhaite donc de l'aide pour la réalisation de la partie :
    hash_map
    |________tableau
    J'espère que j'ai été un peu plus clair.

    Coordialement.

  4. #4
    Membre éprouvé
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Par défaut
    Je viens de commencer le perl et je dois concevoir une application dans laquelle je suis ammené à concevoir une hash dans laquelle se situe un tableau.
    Voila ce que ton code semble vouloir faire, mais sans plus d'explications et de commentaires, il est difficile de le comprendre.
    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
    # clé : $sub_group (${$k}[$i])   valeur : array contenant les valeurs de ${$k}[$i+1]
    my %group = ();
     
    #rajout du groupe aux données disponibles
    my $groupname = ${$k}[0]; #Cette ligne est initialisee en dehors de ce bout de code
     
     
    for ( my $i=0; $i < @{$k}; $i += 2 ){
     
    	my $sub_groupname =  ${$k}[$i];
     
    	# si $group{$sub_groupname} existe, on ajoute la valeur de ${$k}[$i+1] à l'array qui lui est associé 
    	if( exists $group{$sub_groupname} ){
    		push @{$group{$sub_groupname}}, ${$k}[$i+1];
    	}
     
    	# si $group{$sub_groupname} n'existe pas, on le crée et sa valeur est un array contenant la valeur ${$k}[$i+1]
    	else {
    		my @tab = (${$k}[$i+1]);
    		$group{$sub_groupname} = \@tab;
    	}
     
    }
     
    # parcours des résultats obtenus
    foreach my $sub_groupname (keys %group){
     
    	print "$sub_groupname\n";
    	map {print "=>$_\n";} @{$group{$sub_groupname}};
    }

  5. #5
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2006
    Messages
    27
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2006
    Messages : 27
    Par défaut
    Oui c'est tout a fait ce que on code est "sensé" faire mais il ne le fait pas!

    A chaque fois qu'il detecte un sous groupe celui-ci me recree le tableau(ou ecrase la valeur qui y etait) au lieu de rajouter la nouvelle valeur en fin de tableau. J'ai l'impression qu'il considère mon tableau juste comme une valeur et non pas un tableau.

    D'ou pensez vous que cela vienne?

  6. #6
    Membre éprouvé
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Par défaut
    Citation Envoyé par ultimate_manx Voir le message
    D'ou pensez vous que cela vienne?
    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
    #!/usr/local/bin/perl
     
     
    use strict;
    use warnings;
     
     
    my @val = ('sub_0', 'sub_1', 'sub_2', 'sub_3', 'sub_4', 'sub_5', 'sub_8', 'sub_7', 'sub_8', 'sub_9');
    my $k = \@val;
     
     
     
    # clé : $sub_group    valeur : array contenant les valeurs de ${$k}[$i]
    my %group = ();
     
    #rajout du groupe aux données disponibles
    my $groupname = ${$k}[0]; #Cette ligne est initialisee en dehors de ce bout de code
     
     
    for ( my $i=0; $i < @{$k}; $i += 2 ){
     
    	my $sub_groupname =  ${$k}[$i];
     
    	# si $group{$sub_groupname} existe, on ajoute la valeur de ${$k}[$i+1] à l'array qui lui est associé 
    	if( exists $group{$sub_groupname} ){
    		push @{$group{$sub_groupname}}, ${$k}[$i+1];
    	}
     
    	# si $group{$sub_groupname} n'existe pas, on le crée et sa valeur est un array contenant la valeur ${$k}[$i+1]
    	else {
    		my @tab = (${$k}[$i+1]);
    		$group{$sub_groupname} = \@tab;
    	}
     
    }
     
    # parcours des résultats obtenus
    foreach my $sub_groupname (keys %group){
     
    	print "$sub_groupname\n";
    	map {print "=>$_\n";} @{$group{$sub_groupname}};
    }
    Si on utilise un petit array @val, dans l'exemple ci-dessus, on voit bien que les valeurs ne sont pas écrasées et que la clé sub_8 contient bien un array avec les 2 valeurs sub_7 et sub_9.

    Il n'y a peut-être pas de problème mais simplement le fait que tu n'as pas plus d'une valeur associée à chaque clé. Vérifie les valeurs de ton array @{$k}.

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

Discussions similaires

  1. creer une variable contenant info de 2 autres var
    Par kkingstone dans le forum SAS Base
    Réponses: 4
    Dernier message: 26/05/2009, 14h19
  2. rendre iterable une Classe contenant un tableau 2D
    Par Linschn dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 13/05/2009, 21h42
  3. Réponses: 17
    Dernier message: 02/02/2009, 09h57
  4. Creer une variable contenant plusieurs onglets
    Par Tomeloale dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 15/11/2008, 06h26
  5. [VBA-E] Creer une collection contenant les workbook ouverts
    Par jarod_bx dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 21/04/2006, 22h46

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