Bonjour,
je dois charger dans un hash de hash des données issues d'un fichier texte standard.
Le fichier texte contient des lignes de cette forme :
Chaque ligne contient en fait 3 valeurs que je récupère et elles sont séparées par le caractère "égal" ( = ). Ex pour la ligne 1 de mon exemple, 1001 me sert de clé dans mon hash, CHAMP1 me sert de clé dans le hash de hash et enfin, toto est la valeur de CHAMP1.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 1001=CHAMP1=toto 1001=CHAMP2=pouet 1001=CHAMP3=tutu 1015=CHAMP1=coco 1015=CHAMP2=cocot 1015=CHAMP3=titi
J'ai en principe 3 lignes pour chaque clé 1001, 1015 etc.
Le code que j'ai réalisé en premier est celui-ci :
Ce que j'attend, c'est ceci par exemple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 if ($ligne_lue =~ /^([0-9]{4})=(CHAMP1|CHAMP2|CHAMP3)=(.+)$/) { $Hash{$1}->{$2} = $3; } else { warn "ligne inconnue : $.\n"; }
Mon problème, c'est que mon hash, au lieu de rassembler tout ce qu'il trouve comme étant rattaché à la clé 1001 (exemple) en tant que hash de la clé 1001, il me duplique 1001 autant de fois qu'il le trouve dans mon fichier !!!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 $Hash{1001}->{CHAMP1} contient "toto" ->{CHAMP2} contient "pouet" ->{CHAMP3} contient "titi"
Et ça donne :
Comme vous le voyez, mon hash contient 3 fois la même clé 1001 !!!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 $Hash{1001}->{CHAMP1} contient "toto" $Hash{1001}->{CHAMP1} contient "toto" ->{CHAMP2} contient "pouet" $Hash{1001}->{CHAMP1} contient "toto" ->{CHAMP2} contient "pouet" ->{CHAMP3} contient "titi"
J'ai cité 2 exemples issus de mon fichier texte, mon hash devrait donc contenir 2 clés, chacune contenant 3 clés. Ben non, j'ai 6 clés au total !!!
Je suis sous AIX 5 et avec Perl 5.8.0.
Qqun peut-il me dire où j'ai déconné ???
Partager