Bonjour à tous et à toutes
Après avoir passé 3 jours sur le net pour essayer de répondre à ma question, je viens vers vous dans l'espoir de trouver une solution à mon problème...
Alors voilà, je suis encore un peu novice dans le langage PERL et j'ai encore du mal à manipuler les tables de hash de hash.
Au départ j'ai 2 fichiers .tsv; je crée une table de hash pour récupérer les éléments de mon premier fichier. Mon 2e fichier comporte les clés de mon hash.
Je veux ajouter/enrichir mon hash d'informations supplémentaires que comporte mon 2e fichier grâce aux clés (de premier niveau).
exemple :
Fichier1.tsv
identifiant1 courir parc
identifiant2 marcher montagne
...
Fichier2.tsv
identifiant1 chaussures baskets bleus marqueA
identifiant1 haut débardeur jaune marqueB
identifiant2 chaussures chaussures de randonnées marron marqueC
identifiant2 bas short orange marqueD
Ce que j'aimerai :
Si je fais un print pour avoir mon hash de départ après avoir parcouru Fichier1.tsv:
%hash = (
identifiant1 => {
identifiant2 => {
...
);
si je fais un print de mon hash après lecture du Fichier2.tsv:
%hash = (
identifiant1 => {
identifiant2 => {
'type' => chaussures de montagne,
);
Voici mon code :
#!/usr/bin/perl -w
# Usage : ./enriched_hash.pl fichier1.tsv fichier2.tsv
use Data:: Dumper qw(Dumper);
$GU = $ARGV[0];
$inter = $ARGV[1];
my %hash;
open FICHIER1, $GU;
while(<FICHIER1>) {
chomp;
@ligne = split(/\t/, $_);
$hash{$ligne[0]}{'fonction'} = $ligne[1];
$hash{$ligne[0]}{'lieu'} = $ligne[2];
}
close FICHIER1;
print Dumper \%hash;
print "____________________\n";
open FICHIER2, $inter;
while(<FICHIER2>) {
chomp;
@line = split(/\t/, $_);
$hash{$line[0]}{'habits'}{$line[1]}{'type'} = $line[2];
$hash{$line[0]}{'habits'}{$line[1]}{'couleur'} = $line[3];
$hash{$line[0]}{'habits'}{$line[1]}{'marque'} = $line[4];
}
close FICHIER2;
print Dumper \%hash;
print "____________________\n";
Le problème étant : que mon hash de hash n'a plus du tout les fonctions et le lieu du premier niveau.
Comment dois-je faire pour obtenir ce que je veux?
Edit: j'ai retiré le préfixe "Perl 6" de l'intitulé de ton post car il ne concerne manifestement pas Perl 6 (mais Perl 5). Cordialement. Lolo78.
Partager