Perl tableau de tables de hashage
trinity666
-
lami20j Messages postés 21644 Statut Modérateur, Contributeur sécurité -
lami20j Messages postés 21644 Statut Modérateur, Contributeur sécurité -
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
A voir également:
- Perl tableau de tables de hashage
- Tableau word - Guide
- Tableau ascii - Guide
- Dans le fichier, générez ce tableau automatiquement (tableau croisé dynamique ou table de pilote) à partir des quatre premières colonnes. - Guide
- Trier un tableau excel - Guide
- Imprimer un tableau excel - Guide
4 réponses
j'ai le même problème.
Posé plus simplement ça donnerait : comment faire pour qu'une fonction renvoie deux tables de hashages, et surtout pour récupérer ces deux tables en évitant leur applatissement (que les deux tables se retrouvent dans une seule liste...)
Posé plus simplement ça donnerait : comment faire pour qu'une fonction renvoie deux tables de hashages, et surtout pour récupérer ces deux tables en évitant leur applatissement (que les deux tables se retrouvent dans une seule liste...)
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