Boucle en Perl

Résolu
Bonjour,

J'aimerai faire un traitement sur un fichier en PERL mais j'ai quelques difficultés.
Mon fichier est de la forme :
jjmmaaaa hh:mm Valeur
(On y retrouve des valeurs sur 1 semaine, chaque 1/4 d'heure)

Mon objectif est de sommer les valeurs des 1/4 heures pour avoir la valeur à l'heure.

Exemple :

23122009 00:00 150
23122009 00:15 250
23122009 00:30 350
23122009 00:45 450
24122009 00:00 5000
24122009 00:15 6000
24122009 00:30 4000
24122009 00:45 5000

Je souhaiterai obtenir ==> 23122009 00:00 1200
24122009 00:00 20000

Voilà ce que j'ai fait pour chaque heure
if ($hour =="00" ) {
$Valeur+=$val[2];
}

J'ai un programme immense et j'aimerais l'optimiser. Est ce que quelqu'un a une meilleure solution svp ??
J'avoue que je ne sais pas comment m'y prendre.
Configuration: Windows XP Internet Explorer 6.0

3 réponses

  1. Personne ne peut m'aider ??
    0
    1. Salut,

      Script perl
      #!/usr/bin/perl
      use strict;use warnings;
      
      my $fic="fic.txt";
      open F,"fic.txt" or die "E/S : $fic $!\n";
      
      my %h;
      while(<F>){
        my ($date,$val)=(split /\s+/)[0,2];
        $h{$date}+=$val;
      }
      print "$_ 00:00 $h{$_}\n" for(sort keys %h);
      __END__


      Avec perl en ligne de commande
      perl -wlane '$h{$F[0]}+=$F[2];END{print "$_ 00:00 $h{$_}" for (sort keys %h)}' fic.txt

      Avec awk
      awk '{x[$1]+=$3}END{for(i in x) print i " 00:00 " x[i]}' fic.txt
      0