Boucle en Perl

Résolu
wafa_o Messages postés 109 Date d'inscription   Statut Membre Dernière intervention   -  
wafa_o Messages postés 109 Date d'inscription   Statut Membre Dernière intervention   -
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.

3 réponses

wafa_o Messages postés 109 Date d'inscription   Statut Membre Dernière intervention   2
 
Personne ne peut m'aider ??
0
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
wafa_o Messages postés 109 Date d'inscription   Statut Membre Dernière intervention   2
 
Merci lami20j.
En fait je me suis mal exprimée, je voulais la valeur pour chaque heure (à 00h, 1h, 2h...).

J'ai finalement trouvé la réponse grâce à l'une de tes réponses dans un post
https://forums.commentcamarche.net/forum/affich-3741856-perl-tableau-assoc-a-2-dimensions

Merci encore
0