Manipulation de tableau avec PERL

Résolu/Fermé
CaP - 18 mars 2012 à 15:08
 CaP - 24 mars 2012 à 09:51
Bonjour,

J'apprends à utiliser PERL et dans le cadre du cours je bloque sur un exercice à réaliser. A partir d'un fichier texte comme ci-dessous, il s'agit d'écrire un script qui calcule la moyenne des recettes (en colonne 2) par beau temps (en colonne 3) ainsi que par mauvais temps. Le résultat attendu est présenté ci-dessous. J'ai commencé mon script en voulant initialiser le tableau et compter le nombre de jours beau, mais je n'y arrive pas. Comme ceci:

use strict;
use warnings;

open (SOURCE,"$ARGV[0]")
or die ("Impossible d'ouvrir le fichier $ARGV[0]");

# initialise le tableau et compte le nombre de beaux jours
my @tab = <SOURCE>;
my $nbrej_beau = 0;

while (my $ligne = <SOURCE> ) {
chomp $ligne;
my @tab = split (/ \t / ,$ligne);
if ($tab[2] eq "beau") {
$nbrej_beau++;
}
}

print "Nbre de beaux jours: " . $nbrej_beau . "\n";

close (SOURCE);


texte
me 01/02 790 beau
je 02/02 1024 beau
ve 03/02 650 mauvais
sa 04/02 120 beau
lu 06/02 439 mauvais
ma 07/02 370 beau
me 08/02 930 beau

résultat attendu
C:\perl> perl influence_meteo.pl fevrier.txt
Moyenne par beau temps : 646.8
Moyenne par mauvais temps : 544.5
Différence : 102.3

Merci pour toute réponse qui pourrait m'aider.
CaP

1 réponse

TMTOWTDI@ubuntu:~$ cat text
me 01/02 790 beau
je 02/02 1024 beau
ve 03/02 650 mauvais
sa 04/02 120 beau
lu 06/02 439 mauvais
ma 07/02 370 beau
me 08/02 930 beau

TMTOWTDI@ubuntu:~$ cat moyenne_des_recettes.pl
#!/usr/bin/perl
use strict;use warnings;
my (%h,%c);
open F,"text" or die "E/S: $!\n";

while(<F>){
next unless /.*\s+(\d+)\s+(beau|mauvais)/;
$h{$2}+=$1;
$c{$2}++;
}
print "Moyenne par $_ temps : ",$h{$_}/$c{$_},"\n" for keys %h;
__END__

TMTOWTDI@ubuntu:~$ perl moyenne_des_recettes.pl
Moyenne par mauvais temps : 544.5
Moyenne par beau temps : 646.8
0
Bien merci!
0