Boucle en Perl

Résolu
wafa_o Messages postés 112 Statut Membre -  
wafa_o Messages postés 112 Statut Membre -
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. wafa_o Messages postés 112 Statut Membre 2
     
    Personne ne peut m'aider ??
    0
  2. lami20j
     
    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