Bonjour,
J’ai un ensemble de fichiers avec ce type de données :
1:3:
2:1599:
6:4:
17:3246:
112:5545:
Je souhaite traiter ces fichiers. Pour cela j’utilise donc ce code avec une fonction qui retourne le nom des fichiers et une autre qui les ouvre , renvoie leur contenue dans un hash et retourne ce hash au main.
Cependant je n’arrive pas à récupérer le hash dans mon main.
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 #!/usr/bin/perl -w use Carp; use strict; my $repertoire = "/home/baptiste/Desktop/test/"; my @fichier = lister_fichiers($repertoire); foreach my $fic (@fichier){ #my $ref=fct($fic); my %ltemp=fct($fic); print "$fic \n"; #my %ltemp = %$ref; foreach ((my $key,my $valeur)=each(%ltemp)){ print "ltemp : code ".$key." valeur : ".$valeur."\n"; } } sub fct (){ my($fich) = @_; open FICHIER , "< ./test/$fich "; my %list; while (my $ligne = <FICHIER>){ (my $num,my $nb)=split(/:/,$ligne); $list{$num}=$nb; } close FICHIER; while ((my $cle,my $val) = each(%list)){ print "code : ".$cle." nombre d enregistrement : ".$val."\n"; } #my $ref_list = \%list; #return ($ref_list); return (%list); } sub lister_fichiers { my ($repertoire)= @_; my @fichiers = (); opendir (my $rep_fh, $repertoire) or die "impossible d ouvrir \n"; my @file_rep = grep { !/^\.\.?$/ } readdir($rep_fh); closedir ($rep_fh); foreach my $nom (@file_rep) { if (-f "$repertoire/$nom") { push (@fichiers, "$nom"); } } return @fichiers; }
Apres exection de ce script j’obtiens :
yyyyy.dcnt1.org
code : 112 nombre d enregistrement : 5545
code : 6 nombre d enregistrement : 4
code : 1 nombre d enregistrement : 3
code : 17 nombre d enregistrement : 3246
code : 2 nombre d enregistrement : 1599
ltemp : code 6 valeur : 4
ltemp : code 6 valeur : 4
xxxx.dcnt1.org
code : 112 nombre d enregistrement : 5547777777
code : 6 nombre d enregistrement : 4
code : 1 nombre d enregistrement : 3
code : 17 nombre d enregistrement : 2907
code : 2 nombre d enregistrement : 1433
ltemp : code 6 valeur : 4
ltemp : code 6 valeur : 4
J’ai aussi essayé de le passer par référence (comme mis en commentaire mais le résultat et le même). Auriez vous une solution à ce problème ou quelques conseils ?
merci à vous .
Partager