Manipulation de tableau avec PERL

Résolu
CaP -  
 CaP -
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

  1. TMTOWTDI
     
    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
    1. CaP
       
      Bien merci!
      0