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 :

clé qui diffère - tableau hachage


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mai 2009
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 19
    Par défaut clé qui diffère - tableau hachage
    bonjour a tous, avec la grande aide de philou, je suis arrivé au code ci dessous qui me permet (presque) de mettre en forme des données dans l'esprit d'un tableau croisé dynamique excel.

    dans mon hash %h et d'apres le code je pensais avoir en clé principale uniquement $data[0] (USER) alors que j'ai aussi $data[1] (ROLE)
    (j'explique mieux plus bas)

    voici le résultat donné par data dumper :

    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
    %h = (                                                                                                                                 
           'ROLE_B' => {},
           'ROLE_E' => {},
           'ROLE_C' => {},
           'USER_2' => {
                         'ROLE_E' => {
                                       'VA3' => [
                                                  0,
                                                  0
                                                ],
                                       'V02' => [
                                                  0,
                                                  0
                                                ],
                                       'FB1' => [
                                                  0,
                                                  '0',
                                                  0
                                                ],
    on y voit bien que tout en haut de la hierachie de %h il y a des roles sans descendance (c'est ceux là que je ne souhaite plus voir) et des users avec les roles et les tc associés (résultat attendu).

    voici mon fichier TCD :

    USER_2 ROLE_D LL3 1
    USER_2 ROLE_D FB3 0
    USER_2 ROLE_E FB3 1
    USER_2 ROLE_E FB1 0
    USER_2 ROLE_A ZTA 1
    USER_1 ROLE_A ZTA 0
    USER_1 ROLE_A VP3 0
    USER_1 ROLE_B V23 1
    USER_1 ROLE_B VA3 0
    USER_1 ROLE_B V02 0
    USER_1 ROLE_C VA5 1
    USER_1 ROLE_C V23 1


    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    #!/usr/bin/perl
    use strict;
    use warnings;
    use Data::Dumper;
     
    my %h = ();
    my @tab_unique_tc = ();
    my @tabtc = ();
     
     
     
    open(TCD,"tcd") || die ("Erreur d'ouverture de tableau croisé dynamique");
    while(<TCD>){
      next if /^$/;
      my @data_tc = split /\s+/;
     
      push (@tabtc,$data_tc[2]);
     
     
    }
    close TCD;
    # effacer les doublons
    my %h_tc   = map { $_, 1 } @tabtc;
    @tab_unique_tc = sort keys %h_tc;
     
     
    open(TCD,"tcd") || die ("Erreur d'ouverture de tableau croisé dynamique");
    while(<TCD>){
      next if /^$/;
      my @data = split /\s+/;
     
      push @{$h{$data[0]}->{$data[1]}->{$data[2]}}, $data[3];
     
      foreach my $tc (@tab_unique_tc) {
        push @{$h{$data[0]}->{$data[1]}{$tc}},0 unless exists $h{$data[1]}{$tc};
      }
    }
    close TCD;
     
    print "tc : @tab_unique_tc \n";
     
    print Data::Dumper->Dump([\%h], [qw(*h)]);
     
    for my $user (keys %h) {
      print "user : $user";
      for my $k(keys %{$h{$user}}){
        print "$k";
        for my $kk(sort keys %{$h{$user}->{$k}}){
        print " ",eval ( join "+",@{$h{$user}->{$k}{$kk}});
        }
    print "\n";
      }
    print "\n";
    }

  2. #2
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Par défaut
    Il y a un bug ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    push @{$h{$data[0]}->{$data[1]}{$tc}},0 unless exists $h{$data[1]}{$tc};
    Il faut sans doute écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    push @{$h{$data[0]}->{$data[1]}{$tc}},0 unless exists $h{$data[0]->{$data[1]}{$tc};

  3. #3
    Membre averti
    Inscrit en
    Mai 2009
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 19
    Par défaut
    merci
    ca marche mieux en effet mais il y a quand meme un probleme.

    si je laisse use strict dans mon programme je n'ai pas de résultat sauf ce mess d'erreur:

    Can't use string ("USER_2") as a HASH ref while "strict refs" in use at mef.pl line 35, <TCD> line 1.

    voici ma ligne 35
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    push @{$h{$data[0]}->{$data[1]}{$tc}},0 unless exists $h{$data[0]->{$data[1]}{$tc}};
    si j'enleve use strict, j'ai le droit à ces quelques lignes avant 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
    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 1.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 1.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 1.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 1.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 1.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 1.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 1.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 1.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 1.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 2.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 2.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 2.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 2.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 2.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 2.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 2.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 2.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 2.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 3.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 3.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 3.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 3.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 3.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 3.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 3.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 3.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 3.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 4.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 4.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 4.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 4.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 4.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 4.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 4.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 4.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 4.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 5.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 5.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 5.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 5.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 5.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 5.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 5.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 5.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 5.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 6.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 6.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 6.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 6.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 6.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 6.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 6.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 6.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 6.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 7.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 7.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 7.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 7.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 7.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 7.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 7.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 7.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 7.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 8.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 8.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 8.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 8.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 8.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 8.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 8.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 8.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 8.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 9.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 9.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 9.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 9.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 9.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 9.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 9.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 9.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 9.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 10.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 10.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 10.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 10.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 10.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 10.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 10.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 10.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 10.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 11.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 11.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 11.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 11.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 11.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 11.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 11.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 11.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 11.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 12.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 12.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 12.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 12.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 12.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 12.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 12.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 12.
    Use of uninitialized value in exists at mef.pl line 35, <TCD> line 12
    thanks

  4. #4
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Par défaut
    Exact, j'ai testé une chose, et je t'en ai donnée une autre.
    Il faut écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    push @{$h{$data[0]}->{$data[1]}{$tc}},0 unless exists $h{$data[0]}->{$data[1]}{$tc};

  5. #5
    Membre averti
    Inscrit en
    Mai 2009
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 19
    Par défaut
    merci,

    en effet c'est mieux comme ca...

Discussions similaires

  1. Réponses: 3
    Dernier message: 01/04/2015, 11h52
  2. Modifier classe qui utilise tableau en LinkedList
    Par gégé140488 dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 02/04/2010, 16h51
  3. un tableau hachage
    Par radahm dans le forum Langage
    Réponses: 5
    Dernier message: 18/05/2009, 12h00
  4. Réponses: 1
    Dernier message: 26/03/2008, 18h21
  5. Hasard qui diffère à chaque execution
    Par piotrr dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 21/10/2007, 11h06

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