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 :

Probléme de parcour d'une table


Sujet :

Langage Perl

  1. #1
    Membre régulier Avatar de rootdaoud
    Inscrit en
    Mars 2005
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 100
    Points : 78
    Points
    78
    Par défaut Probléme de parcour d'une table
    Bonjour,

    j'ai un tableau d'hachage remplis avec des références sur d'autres tableaux.
    En parcourant les élément de se tableau, je ne peux pas comprendre le résultat, sur tout lorsque j'utilise la même fonction d'une maniére recursive quand je me trouve avec un tableau d'hachage.Est ce que quelqu'un peux m'explique pourquoi se comportement.

    voilà mon 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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    #!/usr/local/bin/perl
    @array1=("get_values","Creative ID","false");
    @array2=("get_values","Sales"  ,"false");
    %h1=("table"=>[\@array1,\@array2]);
     
    @array3=("get_values","Campaign Name","false");
    @array4=("get_values","Impressions"  ,"false");
    @array5=("get_values_and_click","Total Sales",\%h1);
    %h=("table"=>[\@array3,\@array4,\@array5]);
     
    sub my_hach{
      %h= @_;
      foreach my $k (keys(%h)){
        @array6= @{ $h{$k} };
        for my $i (0..$#array6){
          @array7=@{$array6[$i]};
          for my $j (0..$#array7){
            if(ref($array7[2])){           
               my_hach(%{$array7[2]});
               print "$i-$j ->$array7[2]\n";
            }else{
               print "$i-$j ->$array7[$j] \n";
            }
          }
        }
      }
    }
     
    my_hach(%h);
    et voilà le résultat:
    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
     
    0-0 ->get_values 
    0-1 ->Campaign Name 
    0-2 ->false 
    1-0 ->get_values 
    1-1 ->Impressions 
    1-2 ->false 
    2-0 ->HASH(0x9d27424)
    0-0 ->get_values 
    0-1 ->Creative ID 
    0-2 ->false 
    1-0 ->get_values 
    1-1 ->Sales 
    1-2 ->false 
    2-1 ->Sales 
    2-2 ->false
    et à mon avis je dois avoir sa-et c'est sa mon objectif-:
    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
     
    0-0 ->get_values 
    0-1 ->Campaign Name 
    0-2 ->false 
    1-0 ->get_values 
    1-1 ->Impressions 
    1-2 ->false 
    2-0 ->get_value_and_click
    2-1 ->Total Sales 
    0-0 ->get_value 
    0-1 ->Creative ID
    0-2 ->false
    1-0 ->get_values 
    1-1 ->Sales
    1-2 ->false 
    2-2 ->HASH(0x9d27424)

  2. #2
    Membre actif Avatar de mobscene
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    331
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 331
    Points : 234
    Points
    234
    Par défaut
    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
    #!/usr/local/bin/perl -w
    use strict;
    use diagnostics;
     
    my @array1 = ("get_values","Creative ID","false");
    my @array2 = ("get_values","Sales"  ,"false");
    my %h1 = ("table" =>[\@array1,\@array2]);
     
    my @array3 = ("get_values","Campaign Name","false");
    my @array4 = ("get_values","Impressions"  ,"false");
    my @array5 = ("get_values_and_click","Total Sales",\%h1);
    my %h = ("table" =>[\@array3,\@array4,\@array5]);
     
    sub my_hash (%); 
     
    sub my_hach (%) {
      my %data = @_;
      foreach my $k (keys(%h))
      {
        my @array6 = @{ $data{$k} };
        for my $i (0..$#array6)
        {
          my @array7= @{$array6[$i]};
          for my $j (0..$#array7)
          {
            if( ref($array7[2]) )
            {           
               my_hach(%{$array7[2]});
               print "$i-$j ->$array7[2]\n";
            }
              else
            {
               print "$i-$j ->$array7[$j] \n";
            }
          }
        }
      }
    }
     
    my_hach(%h);

    J'obtient

    0-0 ->get_values
    0-1 ->Campaign Name
    0-2 ->false
    1-0 ->get_values
    1-1 ->Impressions
    1-2 ->false
    0-0 ->get_values
    0-1 ->Creative ID
    0-2 ->false
    1-0 ->get_values
    1-1 ->Sales
    1-2 ->false
    2-0 ->HASH(0x186d2bc)
    0-0 ->get_values
    0-1 ->Creative ID
    0-2 ->false
    1-0 ->get_values
    1-1 ->Sales
    1-2 ->false
    2-1 ->HASH(0x186d2bc)
    0-0 ->get_values
    0-1 ->Creative ID
    0-2 ->false
    1-0 ->get_values
    1-1 ->Sales
    1-2 ->false
    2-2 ->HASH(0x186d2bc)
    Il faut tjours déclarer ses variables my et utiliser use strict; et use diagnostics;


    Le résulat diffère un peu de ce que tu dit attendre

  3. #3
    Membre régulier Avatar de rootdaoud
    Inscrit en
    Mars 2005
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 100
    Points : 78
    Points
    78
    Par défaut
    Merci pour votre réponse.
    Mais même avec se affichage, est ce que vous voyez que c'est logique?!!!!!!
    sur tout au niveau de @array5.
    Merci

  4. #4
    Membre régulier Avatar de rootdaoud
    Inscrit en
    Mars 2005
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 100
    Points : 78
    Points
    78
    Par défaut

    j'avais une erreur ds le code que j'ai pas remarquer.
    c'etait
    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 -w
    use strict;
    use diagnostics;
     
    my @array1 = ("get_values","Creative ID","false");
    my @array2 = ("get_values","Sales"  ,"false");
    my %h1 = ("table" =>[\@array1,\@array2]);
     
    my @array3 = ("get_values","Campaign Name","false");
    my @array4 = ("get_values","Impressions"  ,"false");
    my @array5 = ("get_values_and_click","Total Sales",\%h1);
    my %h = ("table" =>[\@array3,\@array4,\@array5]);
     
    sub my_hash (%); 
     
    sub my_hach (%) {
      my %data = @_;
      foreach my $k (keys(%h))
      {
        my @array6 = @{ $data{$k} };
        for my $i (0..$#array6)
        {
          my @array7= @{$array6[$i]};
          for my $j (0..$#array7)
          {
      
            if( ref($array7[2]) )#solution if( ref($array7[$j]) )
            {           
             my_hach(%{$array7[2]});#solution my_hach(%{$array7[$j]});
               print "$i-$j ->$array7[2]\n";#solution print "$i-$j ->$array7[$j]
            }
              else
            {
               print "$i-$j ->$array7[$j] \n";
            }
          }
        }
      }
    }
     
    my_hach(%h);
    Merci.

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

Discussions similaires

  1. problème parcours d'une table sql
    Par gus8543 dans le forum SAS Base
    Réponses: 2
    Dernier message: 17/06/2008, 17h57
  2. Problème avec affichage d'une table modifiée
    Par auriolbeach dans le forum Access
    Réponses: 6
    Dernier message: 31/10/2005, 15h45
  3. Problème d'insertion dans une table MYSQL
    Par greg69 dans le forum Requêtes
    Réponses: 4
    Dernier message: 24/10/2005, 11h34
  4. Problème de suppression dans une table
    Par Splinter dans le forum Bases de données
    Réponses: 3
    Dernier message: 17/10/2005, 10h55
  5. Problème de dépendances dans une table
    Par PrinceMaster77 dans le forum Outils
    Réponses: 1
    Dernier message: 22/11/2004, 12h39

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