Perl tableau de tables de hashage
trinity666
-
lami20j Messages postés 21506 Date d'inscription Statut Modérateur, Contributeur sécurité Dernière intervention -
lami20j Messages postés 21506 Date d'inscription Statut Modérateur, Contributeur sécurité Dernière intervention -
Bonjour,
voici ma fonction retournant un tableau de tables de hashages:
sub fonc2{
my @a=();
my %c={"a"=>"1","b"=>"2","c"=>"3"};
my %d={"d"=>"4","e"=>"5","f"=>"6"};
my %e={"g"=>"7","h"=>"8","i"=>"9","j"=>"10"};
$a[0]=\%c;
$a[1]=\%d;
$a[2]=\%e;
return @a;
}
lorsque je veux récupérer @a je fais:
@b=fonc2();
je veux récupérer mes tables de hash je ne sais pas comment faire j'ai tout essayé:
%h=%{$b[0]} ne marche pas
%h=%{%{$b[0]}} non plus
%h=%{${$b[0]}} non plus
%h=%{%{@b[0]}} non plus
j'ai meme essayé d'enlever les références de ma fonction:
$a[0]=%c;
$a[1]=%d;
$a[2]=%e;
dans la table b il y a des symboles bizarres :1/81/81/8
les tables de hashage sont vides
comment faire
ca fait 2 jours que je cherche
merci par avance
voici ma fonction retournant un tableau de tables de hashages:
sub fonc2{
my @a=();
my %c={"a"=>"1","b"=>"2","c"=>"3"};
my %d={"d"=>"4","e"=>"5","f"=>"6"};
my %e={"g"=>"7","h"=>"8","i"=>"9","j"=>"10"};
$a[0]=\%c;
$a[1]=\%d;
$a[2]=\%e;
return @a;
}
lorsque je veux récupérer @a je fais:
@b=fonc2();
je veux récupérer mes tables de hash je ne sais pas comment faire j'ai tout essayé:
%h=%{$b[0]} ne marche pas
%h=%{%{$b[0]}} non plus
%h=%{${$b[0]}} non plus
%h=%{%{@b[0]}} non plus
j'ai meme essayé d'enlever les références de ma fonction:
$a[0]=%c;
$a[1]=%d;
$a[2]=%e;
dans la table b il y a des symboles bizarres :1/81/81/8
les tables de hashage sont vides
comment faire
ca fait 2 jours que je cherche
merci par avance
Configuration: Windows XP Internet Explorer 7.0
A voir également:
- Perl tableau de tables de hashage
- Tableau word - Guide
- Trier un tableau excel - Guide
- Tableau croisé dynamique ou table de pilote - Guide
- Imprimer un tableau excel - Guide
- Tableau des codes ascii - Guide
4 réponses
Re,
Tu dois utiliser les paranthèses pour la définition d'un hash et pas les accolades ;-)
Ici my %c={"a"=>"1","b"=>"2","c"=>"3"}; , tu affectes un hash anonyme à un hash au lieu d'affecter à un scalaire.
Par exemple
Voici quelque version pour ta fonction
Tu dois utiliser les paranthèses pour la définition d'un hash et pas les accolades ;-)
Ici my %c={"a"=>"1","b"=>"2","c"=>"3"}; , tu affectes un hash anonyme à un hash au lieu d'affecter à un scalaire.
Par exemple
my $c={"a"=>"1","b"=>"2","c"=>"3"};
Voici quelque version pour ta fonction
sub fonc2{
my @a=();
my %c=("a"=>"1","b"=>"2","c"=>"3");
my %d=("d"=>"4","e"=>"5","f"=>"6");
my %e=("g"=>"7","h"=>"8","i"=>"9","j"=>"10");
$a[0]=\%c;
$a[1]=\%d;
$a[2]=\%e;
return @a;
} ousub fonc2{
my %c=("a"=>"1","b"=>"2","c"=>"3");
my %d=("d"=>"4","e"=>"5","f"=>"6");
my %e=("g"=>"7","h"=>"8","i"=>"9","j"=>"10");
my @a=(\%c,\%d,\%e);
return @a;
}
ou encoresub fonc2{
my @a = ();
$a[0] = {"a"=>"1","b"=>"2","c"=>"3"};
$a[1] = {"d"=>"4","e"=>"5","f"=>"6"};
$a[2] = {"g"=>"7","h"=>"8","i"=>"9","j"=>"10"};
return @a;
}
et surtout pour récupérer ces deux tables en évitant leur applatissement (que les deux tables se retrouvent dans une seule liste...)
En utilisant les références.
sub Extract_data_tag { open(RES_MATCH, "<$opt_r") or die("Impossible d'ouvrir le fichier $opt_r"); my (@liste_FT) = (); my (%FT, %tags) = (); my ($tag_id, $tss, $ref_res) = (); [...] $ref_res = [%tags, %FT]; return $ref_res; } my $ref_data = &Extract_data_tag(); my %tags_infos = $ref_data ->[0]; my %liste_FT = $ref_data ->[1]; print "Nombre de tags : ".scalar(keys(%tags_infos))."\n";Mais bien évidemment ça marche pas...
Sauf que j'arrive pas à trouver la coquille...
sub Extract_data_tag { open(RES_MATCH, "<$opt_r") or die("Impossible d'ouvrir le fichier $opt_r"); my (@liste_FT) = (); my (%FT, %tags) = (); my ($tag_id, $tss, $ref_res) = (); my $line; my $cpt = 0; while(defined($line = <RES_MATCH>)) { if($line =~m/Tag_id (\d+), .+, TSS (\d+), FT (.+), \n/) { $cpt ++; $tag_id = $1; $tss = $2; $tags{$tag_id} = {"TSS" => $tss, "liste_FT" => $3}; @liste_FT = split(", ", $3); foreach my $factor (@liste_FT) { $FT{$factor} = 1; } } } close(RES_MATCH); print "\nNb de FT different trouves : ".keys(%FT)."\n\n"; print "Nb de tags : $cpt\n"; $ref_res = [%tags, %FT]; return $ref_res; }suivi de l'appel de la fonction :
my @ref_data = &Extract_data_tag(); my $ref1 = $ref_data[0]; my $ref2 = $ref_data[1]; my %tags_infos = %$ref1; my %liste_FT = %$ref2; sub Extract_data_tag { open(RES_MATCH, "<$opt_r") or die("Impossible d'ouvrir le fichier $opt_r"); my (@liste_FT) = (); my (%FT, %tags) = (); my ($tag_id, $tss, @ref_res) = (); [...] @ref_res = (\%tags, \%FT); return @ref_res; }Le problème est dnc résolu pour moi
On était en train de poster en même temps ;-).
http://www.commentcamarche.net/forum/affich 9694055 perl tableau de tables de hashage?#8