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 :

tableau de tables de hachage


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 4
    Par défaut tableau de tables de hachage
    Bonjour,

    J'ai un problème d'ans l'appel d'un tableau composé de tables de hachages.

    J'aimerais récupérer la valeur de la clé 978 de la table de hachage contenue dans le tableau tab (indice $t_X).

    J'ai essayé moultes possibilités, rien ne fonctionne

    essai 1:

    $test=$tab[$t_X]{978};
    print "$test\n";
    erreur indiquée: can t coerce hash into array

    essai2: Pour imprimer toutes les clés avec les valeurs:

    $dico=@tab[$t_X];
    foreach my $kk (keys(%dico))
    {
    print "Clef=$kk Valeur=$dico{$kk}\n";
    }

    Rien ne marche. L'erreur est j'éspère évidente, pour certains. Un graaaaaaaaaaaaand merci à ceux qui me répondront, je commence à perdre patience...

  2. #2
    Expert confirmé
    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
    Par défaut
    Si @tab était effectivement un tableau contenant à l'indice $t_X une référence vers un hash ce code serait correct... La conclusion est donc que ce n'est pas le cas, autrement dit ta description est incorrecte, d'après le message d'erreur il est possible que $tab[$t_X] soit une référence vers un tableau et non un hash (le message ne serait-il pas plutôt "Can't coerce array into hash", ta version m'est inconnu).

    En bref il va falloir nous montrer la déclaration et construction de @tab (en résumé STP).

    --
    Jedaï

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 4
    Par défaut
    Bonjour, bonjour !
    Voici un extrait de ma fonction qui devrait générer un tableau de tables de hachage. J’ai élagué pas mal mon code, donc à priori le contenu de la table n’est plus très compréhensible car non déclaré, mais ce n’est pas très important dans mon problème.

    En effet, je m’etais trompée dans le message d’erreur qui est bien "Can't coerce array into hash" !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    @tab=();
     
    	for ($iq=0;$iq<$co; $iq++)
    		{
    		%d=();
    		push @tab,[%d];
    		}
    S’il y a un problème, c’est j’imagine probablement ici, où j’initialise le tableau @tab avec des tables de hachage vises. De surcroit, ce n’est peut être pas nécessaire ?

    Suite du code:

    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
     
     
    	for ($i=0;$i<($n);$i++) 
     
    		{
     
    		for ($j=1;$j<($n_t);$j++)			
    {
    				push(@V, $ind) ;
     
    				$dico=@tab[$V[$p-1]]; #le contenu de tab est un dico normalement …
    #j’ai supprimé ici toute la definition de V[$p-1], mais à priori ce n’est pas ca le probleme.
    				$dico{$i}=1; 
    			}			
     
    		}
     
    	return @tab;
    	}
    Voilà, je débute en perl, ca se voit sans doute… mais j’espere bien resoudre ma connerie rapidement. Merci beaucoup Jedai, de reponde aussi rapidement… Bonne journée !

  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 te conseille vivement d'utiliser strict et warnings et de déclarer tes variables.

    en début de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    use stricts;
    use warnings;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for ($i=0;$i<($n);$i++)
    les parenthèses sont inutiles

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for (my $i=0; $i<$n; $i++)


    S’il y a un problème, c’est j’imagine probablement ici, où j’initialise le tableau @tab avec des tables de hachage vises. De surcroit, ce n’est peut être pas nécessaire ?
    A priori ça parait inutile mais que veux-tu faire exactement?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    @tab=();
     
    	for (my $iq=0;$iq<$co; $iq++)
    		{
    		     my %d;
    		     push @tab,\%d;
    		}
    Tu dois utiliser des références de hash.


    Que cherches-tu à faire?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    # $dico contient le nombre d'éléments de @tab
    $dico = @tab;
     
    #$dico contient la valeur de $tab[$i]
    $dico = $tab[$i];
     
     
    # $dico contient une référence vers la table
    $dico = \@tab;

    Le mieux serait que tu nous expliques exactement le problème, ce que tu veux obtenir.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 4
    Par défaut
    Bonjour,
    Je te remercie pour ton aide, j'ai tenté les différentes corrections mais je ne suis pas encore arrivée au bout des mes efforts!
    Je vais essayer d'expliquer plus précisément ce que je n'arrive pas à obtenir.

    J'ai une premiere fonction "dictionnaire" qui initialise un TABLEAU tab DE TABLES DE HACHAGES %d.

    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
     
     
     
    sub dictionnaire
     
    {
     
    #tout d'abord j'initialise mon tableau @tab avec pour chaqye tab[$iq] un dictionnaire %d bide que je remplirai plus tard.
    	for (my $iq=0;$iq<$co; $iq++)
    		{
    		     my %d;
    		     push @tab,\%d;
    		}
     
     
    #ici, je remplis chaque dictionnaire en ajoutant une clé $i dans la cellule $indice de du tableau de tables. 
    # $indice est obtenu à partir d'un tableau $t_termes_tot à 2D, qui fonctionne , le probleme ne vient pas de lui..
    	for ( my $i=0;$i<($n1);$i++) 
     
    		{
     
     
    		for (my $j=1;$j<($n2);$j++) #on parcourt tous les termes j de l'article i
    			{
     
    			$indice=$map{ $t_termes_tot[$i][$j] };
     
    			$tab[$indice]{$i} = 1 # la nouvelle clé ajoutée à la table est $i, de valeur 1. Cette table est contenu dans le tableau, dans la cellule $tab[$indice].
     
    			}		
     
    		}	
     
    		return @tab;
     
    	}
     
     
    &dictionnaire;
    J'ai ensuite une deuxième fonction dist (qui calculera des distances, mais pour l instant j 'essaye juste de récupérer les valeurs des tables de hachage contenues dans le tableau @tab, ce que je n'arrive pas à faire!

    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
     
     
    sub dist
    	{	
    	# [...]	partie du code qui ne pose  à priori pas problème
    	#je parcours tout le tableau @$vec1 défini précédemment, et contenant différents $t_X
     
    		foreach my $t_X (@$vec1) #on parcourt tous les termes de l'article X
    			{
     
    			%d_mesh=@tab[$t_X];  #j'enregistre la table de hachage pour chaque case du tableau souhaitée
     
    			foreach my $kk (keys(%d_mesh)) #je print le contenu de la table de hachage
        				{
          				 print "Clef=$kk Valeur=$d_mesh{$kk}\n";
         				}	
     
    			}
     
    	}
    Je n'ai plus le problème "Can't coerce array into hash" , mais au lieu de me donner les clés et les valeurs des clés, j'obtiens les différentes références aux tables de hachage, du style:
    Clef= HASH(0x29099fc) Valeur=
    Clef=HASH(0x28fe438) Valeur=



    Suis-je un peu plus claire dans mes explications? Un grand grand grand merci à ceux qui trouveront le temps de résoudre mon problème...Bon dimanche!

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 4
    Par défaut
    Bonjour,
    Ne cherchez plus, il me semble avoir résolu le problème. Merci pour votre aide, et très certainement à bientôt... car j'en ai pas fini avec perl

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

Discussions similaires

  1. Réponses: 15
    Dernier message: 10/01/2010, 18h17
  2. créer un tableau à partir d'une table de hachage
    Par étoile de mer dans le forum Débuter
    Réponses: 96
    Dernier message: 03/11/2009, 22h57
  3. WSDL et paramètres "structurés" tableau/table de hachage
    Par _-Sky-_ dans le forum Services Web
    Réponses: 1
    Dernier message: 17/04/2009, 13h36
  4. table de hachage et tableau
    Par washh dans le forum Langage
    Réponses: 4
    Dernier message: 21/07/2008, 11h17
  5. Réponses: 5
    Dernier message: 25/11/2007, 19h32

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