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 :

Accès à un tableau dans un objet.


Sujet :

Langage Perl

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2003
    Messages : 20
    Points : 10
    Points
    10
    Par défaut Accès à un tableau dans un objet.
    Un problème tout simple pour un programmeur perl chevronné, mais j'ai cherché et je ne trouve pas, et ça ne s'execute pas comme il faut.

    J'ai 2 classes quasiment similaire.

    une classe grille qui possède deux attributs une chaine de caractère et un tableau de 2 éléments.
    le tableau {M} est construit comme suit


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $i=0;
          foreach $tab (@grilletab)
          {
         ($x,$y)= ($tab  =~ m/^\n*(.+)\s*-\s*(.+)/ );
          $this->{M}[$i]=[$x,$y];
          $i++;
        }
    et

    une classe prono qui possède deux attributs une chaine de caractère et un tableau de 2 éléments.
    le tableau {M} est construit comme suit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        $i=0;
          foreach $tab (@pronotab)
          {
         ($x,$y,$a,$b)= ($tab  =~ m/^\n*(.+)\s*-\s*(.+)\s*(\d+)\s*[-\/]\s*(\d+)/ );
     
          $this->{M}[$i]=[$x,$y,$a,$b];
          $i++;
        }
    A priori ne pause pas de problème car je retrouve mes tout mes petits.
    Dans mon programme principale avec une instance de la classe grille et une liste de la classe prono. Aucun problème.

    J'arrive à parcourir la liste de prono et à récupérer toutes les valeurs.
    Mais je voudrais indépendament récuperer le tableau M de la dernier case de la liste de prono comme un tableau , et récupérer le tableau M de la grille comme un tableau mais je n'y arrive pas


    J'ai essayé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my @tabgrille = @{$grille->{M}};
    ==> mais dans dans $tabgrille[0], j'ai un ARRAY et dans $tabgrille[1] je n'ai rien.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     my @tabresult = $listprono[-1]->{M};
    ==> ça je sais que c'est faux.

    Je voudrais parcourir ensuite ces 2 tableaux. Si quelqu'un pouvait me guider pour ce point précis pour récuperer, sous formede tableau, un tableau dans un objet.

    Merci

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

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Les balises CODE sont dans le signe dièse placé à l'extrême droite de la seconde barre d'outils juste au dessus de la fenêtre où tu écris ton message.

    Je ne connais pas bien l'orienté objet mais cela ressemble à un hash de array. Essaie un peu.

    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
    # tableau contenant la totalité des valeurs
    my @tabgrille;
    for (my $i = 0;  $i< @{$grille->{M}}; $i++){
    	push (@tabgrille ,  @{$grille->{M}[$i]});
    }
     
    # affichage
    map {print "$_\n"} @tabgrille;
     
     
    # tableau contenant les valeur du dernier index
    my @tabresult = @{$listprono->{M}[-1]};
     
    # affichage
    map {print "$_\n"} @tabresult;
    -- Jasmine --

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2003
    Messages : 20
    Points : 10
    Points
    10
    Par défaut
    C'est effectivement un hash contenant un tableau dans les 2 cas, et une chaine de caractère qui ne m'embete pas!!!

    Il n'y pas moyen de récuperer les dits tableaux dans les hash correspondantes en utilisant des références ou je ne sais quoi???

    Ce qui est étrange.... c'est que j'arrive parfaitement à récuperer les champs du tableau de prono quand je parcours la liste des prono avec un foreach puis et chaque tableau avec un foreach!!!?

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

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    C'est effectivement un hash contenant un tableau dans les 2 cas, et une chaine de caractère qui ne m'embete pas!!!

    Il n'y pas moyen de récuperer les dits tableaux dans les hash correspondantes en utilisant des références ou je ne sais quoi???
    Tu voudrais supprimer le premier foreach et faire quelque chose sur une seule ligne du genre
    my @tabgrille = 'ref vers tous les index de @{$grille->{M}}';
    ... je ne pense pas que cela soit possible

    Tu peux par contre remplacer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for (my $i = 0;  $i< @{$obj1->{M}}; $i++){
     
    	push (@tabgrille ,  @{$obj1->{M}[$i]})
    }
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    map {push (@tabgrille ,  @{$_});} @{$obj1->{M}};


    Ce qui est étrange.... c'est que j'arrive parfaitement à récuperer les champs du tableau de prono quand je parcours la liste des prono avec un foreach puis et chaque tableau avec un foreach!!!?
    Qu'y a-t'il d'étrange à cela?
    -- Jasmine --

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2003
    Messages : 20
    Points : 10
    Points
    10
    Par défaut
    Je trouve étrange que qu'en parcourtant la liste de prono, @listprono, avec un foreach, et en récupérant à chaque fois la variable de parcours, et en la "castant" dans un tableau, j'accède à tout les champs.
    par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    foreach $ligneprono (@listprono)
    {
    @Tabprono = @($ligneprono);
     
    ..
     
     foreach $
      {
     
     
      }
     
    }
    Alors qu'en essayant "d'attaquer" un indice particulier ou juste une instance, le comportement me semble différent.

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

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Si l'écriture sans index te dérange
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    foreach $ligneprono (@listprono)
    {
            my @Tabprono = @{$ligneprono};
    }
    cela revient au même de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for (my $i = 0;  $i< @listprono; $i++){
    	my @Tabprono = @{$ligneprono[$i]};
    }


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    foreach $ligneprono (@listprono)
    tu places dans $ligneprono les valeurs de @listprono.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for (my $i = 0;  $i< @listprono; $i++)
    tu parcours un à un les index de @listprono et tu accèdes aux valeurs via $listprono[$i]
    -- Jasmine --

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2003
    Messages : 20
    Points : 10
    Points
    10
    Par défaut
    ok merci!

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

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    J'ai rajouté une petite explication afin que tu comprennes mieux


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    foreach $ligneprono (@listprono)
    tu places dans $ligneprono les valeurs de @listprono.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for (my $i = 0;  $i< @listprono; $i++)
    tu parcours un à un les index de @listprono et tu accèdes aux valeurs via $listprono[$i]
    -- Jasmine --

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2003
    Messages : 20
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par Jasmine80 Voir le message
    Les balises CODE sont dans le signe dièse placé à l'extrême droite de la seconde barre d'outils juste au dessus de la fenêtre où tu écris ton message.

    Je ne connais pas bien l'orienté objet mais cela ressemble à un hash de array. Essaie un peu.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    # tableau contenant la totalité des valeurs
    my @tabgrille;
    for (my $i = 0;  $i< @{$grille->{M}}; $i++){
    	push (@tabgrille ,  @{$grille->{M}[$i]});
    }
     
    # affichage
    map {print "$_\n"} @tabgrille;
    j'arrive à récupérer la bonne valeur dans $tabgrille[0], mais $tabgrille[1] est vide.


    Citation Envoyé par Jasmine80 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    # tableau contenant les valeur du dernier index
    my @tabresult = @{$listprono->{M}[-1]};
     
    # affichage
    map {print "$_\n"} @tabresult;
    ça n'a pas l'air de marcher.

    Je vais faire des tests complémentaires demain.

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

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Je débute en OO. J'avais crée



    Val_obj.pm
    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
    #!/usr/bin/perl
     
     
     
    #------------- Val_obj.pm ----------------#
     
    use strict;
    use warnings;
     
    package Val_obj;                                       
     
     
    sub new {
            my ($class, $name) = @_;
            my $self = {};                                                     
    	$self->{M}[0]=['a b c d', 'e f g h', 'i j k l'];
    	$self->{M}[1]=['1 2 3', '4 5 6', '7 8 9'];
    	bless ($self, $class);
           return $self;
    }
     
     
     
     
    1;

    Val_obj.pl
    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
    #!/usr/bin/perl
     
    use strict;
    use warnings;
     
    use Val_obj;
     
     
    my $obj1 = Val_obj->new ("Test1");
     
     
    # tableau contenant la totalité des valeurs
    my @tabgrille;
     
    for (my $i = 0;  $i< @{$obj1->{M}}; $i++){
     
    	push (@tabgrille ,  @{$obj1->{M}[$i]})
    }
     
    map {push (@tabgrille ,  @{$_});} @{$obj1->{M}};
     
    # affichage
    map {print "$_\n"} @tabgrille;
     
    print "\n\n";
     
    # tableau contenant les valeur du dernier index
    my @tabresult = @{$obj1->{M}[-1]};
     
    # affichage
    map {print "$_\n"} @tabresult;
    Cela fonctionnait ... adapte les à ton cas
    -- Jasmine --

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

Discussions similaires

  1. [XL-2007] Insérer un tableau dans un objet sur une feuille de calcul
    Par Denis_67 dans le forum Excel
    Réponses: 5
    Dernier message: 27/11/2013, 08h23
  2. un tableau dans un objet
    Par badibad dans le forum Langage
    Réponses: 5
    Dernier message: 18/06/2013, 10h36
  3. Affichage résultats tableau dans un objet
    Par neoboy dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 11/04/2010, 21h13
  4. Tableau dans un objet
    Par sokai dans le forum C#
    Réponses: 4
    Dernier message: 30/10/2008, 14h02
  5. Tableau dans un objet
    Par sokai dans le forum C#
    Réponses: 0
    Dernier message: 30/10/2008, 10h54

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