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 :

[perl]Problème tableau indexé


Sujet :

Langage Perl

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    801
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 801
    Points : 314
    Points
    314
    Par défaut [perl]Problème tableau indexé
    Bonjour à tous,
    J'ai un hachage qui est construit comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    foreach my $keys (keys %tables)
          {
                my $requete="SELECT ($tables{$keys}[1],TYPE_MESSAGE) from $keys WHERE .....";
    ...
    ....
    my @res=$req->fetchrow_array();
          $TypeMessage{$keys}{$res[0]}{$res[1]}++;
    }
    Je retourne ce hachage de la façon suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    return \%TypeMessage;
    Comment je peux lire ce tableau retournée ???

    Hier, j'ai compris (sur le forum ), comment retourné et lire un tableau de hachage, mais là, ça me semble différent et je n'obtiens aucun résultat ???

    Pouvez vous me filer un petit coups de main ou une petite explication ??

    Merci beaucoup.
    tout le monde est d'accord pour critiquer la pensée unique

  2. #2
    Jeh
    Jeh est déconnecté
    Membre actif Avatar de Jeh
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    203
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 203
    Points : 250
    Points
    250
    Par défaut
    Pour connaitre la structure d'une variable, je te conseille la librairie Data:umper, livrée avec ta version de Perl normalement.
    Tu l'utilises comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    use Data::Dumper;
    .....
    print "\n".Dumper ($ma_variable);
    ça te sera bien utile !
    Verre vide je te plains, verre plein, je te vide.

  3. #3
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut Re: [perl]Problème tableau indexé
    Bonjour,

    En fait, la façon dont tu construit ton hachage importe peu ...

    C'est la façon dont tu le transmets, qui compte.

    Citation Envoyé par LE NEINDRE
    Je retourne ce hachage de la façon suivante:
    En faisant ainsi, tu transmets une référence sur ton hachage, une sorte de pointeur, que tu peux mettre dans un scalaire (avec le sigill $, donc).

    Son utilisation est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    my $reference = appel_qui_retourne_une_reference ();
    # Manière basique de déréférencer la référence :
    my %hash = %$reference;
    # Acces à un élément de la référence :
    my $valeur = $$reference{clef};
    # Ou mieux :
    $valeur = $reference->{clef};
    Citation Envoyé par LE NEINDRE
    Comment je peux lire ce tableau retournée ???

    Hier, j'ai compris (sur le forum ), comment retourné et lire un tableau de hachage, mais là, ça me semble différent et je n'obtiens aucun résultat ???

    Pouvez vous me filer un petit coups de main ou une petite explication ??
    Ceci dit, j'aurai plutot codé comme ceci : Ce qui, pour l'acces donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    my %retour = appel_qui_retourne_un_hash ();
    # Acces direct :
    my $valeur = $retour{clef};

    Voila ...

    Bonne continuation.
    La FAQ Perl est par ici
    : La fonction "Rechercher", on aurait dû la nommer "Retrouver" - essayez et vous verrez pourquoi !

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    801
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 801
    Points : 314
    Points
    314
    Par défaut
    Citation Envoyé par Jeh
    Pour connaitre la structure d'une variable, je te conseille la librairie Data:umper, livrée avec ta version de Perl normalement.
    Tu l'utilises comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    use Data::Dumper;
    .....
    print "\n".Dumper ($ma_variable);
    ça te sera bien utile !
    Oui, je crois que tu m'en avais déjà parlé. Je vais l'essayer par la suite.

    2Eurocents a dit:
    Ceci dit, j'aurai plutot codé comme ceci : Code:
    return %TypeMessage;


    Ce qui, pour l'acces donne : Code:
    my %retour = appel_qui_retourne_un_hash ();
    # Acces direct :
    my $valeur = $retour{clef};
    J'ai finalement fini cette voie.

    pour afficher mes valeurs j'ai fait comme ça ensuite:
    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
     
    $dbh=&TX2::BD::Connexion();
    %ref_message=&TX2::BD::GetTypeMessages($dbh,$compte,$exception_supp,$exception_add);
    &TX2::BD::Deconnexion($dbh);
    foreach my $keys (keys %ref_message)
    {
        foreach my $keys2 (keys %{$ref_message{$keys}})
        {
            foreach my $keys3 (keys %{$ref_message{$keys}{$keys2}})
            {
                  print "1: $keys<BR>";
                  print "2: $keys2<BR>";
                  print "3: $keys3<BR>";
                  print "4: $ref_message{$keys}{$keys2}{$keys3}<BR>";
            }
        }
    }
    Et ça marche.

    Mais je comprends pas pourquoi on me disait de retourner tout le temps une référence de tableau. Pourquoi ça fonctionne ici sans retourner de référence :


    Mis à part mon incompréhension, merci pour l'aide
    tout le monde est d'accord pour critiquer la pensée unique

  5. #5
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut
    Citation Envoyé par LE NEINDRE
    Mais je comprends pas pourquoi on me disait de retourner tout le temps une référence de tableau. Pourquoi ça fonctionne ici sans retourner de référence :

    Mis à part mon incompréhension, merci pour l'aide
    Je ne peux pas me mettre à la place de ceux qui t'ont dit ça, et je ne peux donc te dire pourquoi ils l'ont affirmé.

    Peut être avaient-ils peur que la liste n'existe plus hors du contexte de la fonction, ou un truc comme ça ...

    Cependant, je peux t'affirmer qu'il n'y a aucun risque à retourner une liste ...

    Le seul danger, c'est lorsque l'on veut en retourner plusieurs.

    En effet, return (@liste1, @liste2); retournera une seule grosse liste avec tous les éléments des deux listes. C'est une conséquence du principe d'applatissement des listes.

    Si ce n'est pas le comportement souhaité, mais qu'on veut bien récupérer deux listes, alors il faudra passer par les références avec return (\@liste1, \@liste2);.

    C'est, finalement, le même principe que pour passer des listes en paramètre à des fonctions ...


    Bon courage.
    La FAQ Perl est par ici
    : La fonction "Rechercher", on aurait dû la nommer "Retrouver" - essayez et vous verrez pourquoi !

  6. #6
    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
    Mais je comprends pas pourquoi on me disait de retourner tout le temps une référence de tableau. Pourquoi ça fonctionne ici sans retourner de référence
    Le problème c'est de garder les données bien séparées : dès lors que tu passes ou que tu retournes plusieurs tableaux ou hashs, tu es obligé d'en passer par les références pour éviter de mélanger les données... C'est pourquoi, beaucoup de gens utilisent exclusivement les références, même pour ne renvoyer qu'une seule structure de donnée parce qu'ils ne maîtrisent pas vraiment le langage et que cela leur évite des erreurs.

    Mais si tu comprends bien le problème, c'est bien plus confortable de renvoyer directement le tableau/hash s'il n'y en a qu'un.

    --
    Jedaï

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    801
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 801
    Points : 314
    Points
    314
    Par défaut
    Ok, j'ai compris, j'avais lu cette histoire d'applatissement dans la faq.

    Je pense que j'ai confondu. Lorsqu'on m'a répondu ça, je devais vouloir retourner plusierus tableaux.

    Merci pour l'explication

    Et vive perl quand même
    tout le monde est d'accord pour critiquer la pensée unique

  8. #8
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut
    Un petit [Résolu], alors, pour faire monter nos stats
    La FAQ Perl est par ici
    : La fonction "Rechercher", on aurait dû la nommer "Retrouver" - essayez et vous verrez pourquoi !

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    801
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 801
    Points : 314
    Points
    314
    Par défaut
    Désolé, j'y ai pensé, mais avec la fermeture du forum, j'ai oublié.
    VOilà qui est réparé
    tout le monde est d'accord pour critiquer la pensée unique

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

Discussions similaires

  1. Perl: problème avec un hashage de tableau
    Par lorlando dans le forum Langage
    Réponses: 1
    Dernier message: 24/04/2009, 09h44
  2. [PERL] problème tri de tableau
    Par LE NEINDRE dans le forum Langage
    Réponses: 2
    Dernier message: 31/08/2005, 15h42
  3. [Debutant][Tableau] Tableau indexé sur chaine de caractères
    Par SamRay1024 dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 07/05/2004, 11h14
  4. Tableau à index négatif
    Par karl3i dans le forum C
    Réponses: 14
    Dernier message: 23/10/2003, 17h17
  5. Problème d'index
    Par claude dans le forum SQL
    Réponses: 6
    Dernier message: 04/08/2003, 15h55

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