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 :

pb d'accès à un tableau associatif


Sujet :

Langage Perl

  1. #1
    Membre du Club
    Inscrit en
    Juin 2003
    Messages
    205
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Juin 2003
    Messages : 205
    Points : 56
    Points
    56
    Par défaut pb d'accès à un tableau associatif
    bonjour,

    j'ai developpez un code qui me permet de mettre ds un tableau associatif les resultat d'une rquete avec comme clé le nom des colonnes:

    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
    $version-> execute() || die "pb de selection : $DBI::errstr";
        my $names = $version->{NAME};
        my $table = $version->fetchall_arrayref or die "$version->errstr\n";
        my($i, $j);
      for $i ( 0 .. $#{$table}) 
      {
        for $j ( 0 .. $#{$table->[$i]} )
          {
                push(@tab,$table->[$j][$i]);
        }
            $retourne{$names->[$i]}=@tab;
            splice(@tab,0);
      }
        $version-> finish();
        return %retourne;
    Mais lorsque je souhaite afficher mon tableau je n'y arrive pas, voici comment je fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    %table=$bdd->selection($req);
    for($i .. $table{"nom"})
    {
      print $table{"nom"}[$i]."<br>";
    }
    Si vous pouvez m'aider ca serai cool

    Nixonne
    Vive le hockey sur glace

  2. #2
    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
    Et les fetch*_hashref ne font pas ce que tu veux ?

    (à titre informatif, ton erreur est d'essayer de mettre un tableau dans un hash : tu ne peux pas mettre autre chose qu'un scalaire dans un hash ou un tableau, donc il faut mettre une référence sur ce tableau plutôt que le tableau lui-même pour faire des structures de données complexes).

    --
    Jedaï

  3. #3
    Membre du Club
    Inscrit en
    Juin 2003
    Messages
    205
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Juin 2003
    Messages : 205
    Points : 56
    Points
    56
    Par défaut
    Citation Envoyé par Jedai
    donc il faut mettre une référence sur ce tableau plutôt que le tableau lui-même pour faire des strutures de données complexes.
    c'est à dire, tu fais comment?

    Nixonne
    Vive le hockey sur glace

  4. #4
    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
    Regarde dans notre FAQ, c'est bien expliqué. Mais tu devrais aussi regarder du côté des fetch*_hashref().

    --
    Jedaï

  5. #5
    Membre du Club
    Inscrit en
    Juin 2003
    Messages
    205
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Juin 2003
    Messages : 205
    Points : 56
    Points
    56
    Par défaut
    merci purb le fetch*_hashref, j'ai utilisiser le fetchall_hashref(param) mais il me met chaque ligne dans un hash avec comme clé le paramétre passé.

    ce quei je voudrais faire c'est obtenir une "tableau" de ce type sachant que c'est un résultat de requete:

    |id_user|nom|prenom|
    |1 |val | val2 |
    ...

    et acceder a celui-ci de la manière suivante:

    $table['prenom'][0] #donc val2

    si vous voyé comment faire

    Merci d'avance

    Nixonne
    Vive le hockey sur glace

  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
    Tu ne peux pas tout à fait faire ça directement semble-t-il... Mais tu peux faire un truc très proche qui se consulte comme $table[0]{prenom} avec fetchall_arrayref() si tu lui donne {} en premier argument. Je te reporte à la doc de la fonction fetchall_arrayref().

    --
    Jedaï

  7. #7
    Membre du Club
    Inscrit en
    Juin 2003
    Messages
    205
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Juin 2003
    Messages : 205
    Points : 56
    Points
    56
    Par défaut
    Citation Envoyé par Jedai
    Tu ne peux pas tout à fait faire ça directement semble-t-il... Mais tu peux faire un truc très proche qui se consulte comme $table[0]{prenom} avec fetchall_arrayref() si tu lui donne {} en premier argument. Je te reporte à la doc de la fonction fetchall_arrayref().

    --
    Jedaï
    Merci,

    malheuresement, j'ai encore un pb quelque part, le code ci-dessous m'affiche rien:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    my  $version = $dbp->prepare($requete);
    $version-> execute() || die "pb de selection : $DBI::errstr";
           #my $names = $version->{NAME};
    my $table = $version->fetchall_arrayref({}) or die "$version->errstr\n";
    for($i .. $#{$table})
    {
      print $table[$i]{prenom}."<br>";
    }
    Vive le hockey sur glace

  8. #8
    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
    Y a-t-il quoi que ce soit dans la table retourné par fetch() ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    print "nombre d'éléments : ", scalar(@$table), "\n";
    Si oui, quelles en sont les clés ? (peut-être y a-t-il un problème de casse)

    --
    Jedaï

  9. #9
    Membre du Club
    Inscrit en
    Juin 2003
    Messages
    205
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Juin 2003
    Messages : 205
    Points : 56
    Points
    56
    Par défaut
    il me met 5 soit le nombre d'enregistrement selectionner par ma requete.

    je n'arrive meme pas a afficher les clé.

    Nixonne
    Vive le hockey sur glace

  10. #10
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    print keys %{$table->[0]};
    Qu'est ce que ça donne ?

    (Par ailleurs j'ai l'impression que tu ne comprends pas trop la syntaxe des références, peut-être devrais tu lire la FAQ et la doc de Perl à ce sujet ?)

    --
    Jedaï

  11. #11
    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
    En fait je n'y ai pas prété attention, mais tu as fait des erreurs de syntaxe en examinant le résultat de ta requête : en effet tu le manipules comme un tableau alors qu'il s'agit d'une référence sur un tableau... Et tu n'utilises pas 'use strict;' n'est-ce-pas ? Sinon Perl t'aurais signalé ton erreur.

    Tu devrais vraiment apprendre à utiliser les références et à mettre 'use strict;' au début de ton script, ça t'éviterais de perdre autant de temps sur ce genre de question...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    my  $version = $dbp->prepare($requete);
    $version-> execute() || die "pb de selection : $DBI::errstr";
           #my $names = $version->{NAME};
    my $table = $version->fetchall_arrayref({}) or die "$version->errstr\n";
    for($i .. $#{$table})
    {
      print $table->[$i]{prenom}."<br>";
    }
    --
    Jedaï

  12. #12
    Membre du Club
    Inscrit en
    Juin 2003
    Messages
    205
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Juin 2003
    Messages : 205
    Points : 56
    Points
    56
    Par défaut
    En effet, je viens de lire ta réponse et j'allais justement mettre ce sujet en résolu car j'ai compris pourquoi, erreur de débutant (c'est sans doute parce que je le suis)

    mon code finale:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    sub selection{
      $self=shift;
        $requete=shift;
        my  $version = $dbp->prepare($requete);
      $version-> execute() || die "pb de selection : $DBI::errstr";
        $table = $version->fetchall_arrayref({}) or die "$version->errstr\n";
        $version-> finish();
        return $table;
    }
    Merci quand meme pour ton aide, elle m'a aider a avancer

    Nixonne
    Vive le hockey sur glace

  13. #13
    Membre du Club
    Inscrit en
    Juin 2003
    Messages
    205
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Juin 2003
    Messages : 205
    Points : 56
    Points
    56
    Par défaut
    je remonte le sujet car j'aimerai connaitre comment supprimer le 1ere element d'un tableau comme ca:

    $table->[0]{titre};

    J'ai essayé le shift et le delete mais ca ne marche pas (ou alors je m'y suis encore pris comme un manche)
    Merci d'avance

    Nixonne
    Vive le hockey sur glace

  14. #14
    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
    Et lis la FAQ !!!!

    --
    Jedaï

  15. #15
    Membre du Club
    Inscrit en
    Juin 2003
    Messages
    205
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Juin 2003
    Messages : 205
    Points : 56
    Points
    56
    Par défaut
    en faisant shift @table, il ne me le supprime pas et ne fais rien dessus:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    print $table->[0]{titre};
    shift @table;
    print $table->[0]{titre};
    affichage:
    Nixonne
    Vive le hockey sur glace

  16. #16
    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
    Relis attentivement ma réponse... Et lis la FAQ aussi.

    --
    Jedaï

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

Discussions similaires

  1. [Smarty] objet foreach: accès tableau associatif imbriqué
    Par noobC dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 11/11/2009, 12h48
  2. tableau associatif en asp ?
    Par bigsister dans le forum ASP
    Réponses: 5
    Dernier message: 26/01/2005, 16h47
  3. asp tableau associatif
    Par rfernandez dans le forum ASP
    Réponses: 6
    Dernier message: 19/12/2003, 18h58
  4. [langage] TRI TABLEAU ASSOCIATIF
    Par proner dans le forum Langage
    Réponses: 5
    Dernier message: 04/03/2003, 16h38
  5. [langage] Réinitialiser un tableau associatif.
    Par totox17 dans le forum Langage
    Réponses: 2
    Dernier message: 28/01/2003, 16h29

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