RDV+DIAL chat illimit� dans ta r�g!
no save
Assistance
Achat
News

Forum | programmation
Perl hash tri par valeur
deniss92, le mar. 06 janv. 2009 à 14:59:14
Bonjour,
Je cherche comment faire un tri par valeur dans une table de hachage. Dans le script ci-dessous, le tri par valeur ne fonctionne pas. Le but recherché est de trier par valeur et par ordre décroissant, afin de limiter l'affichage aux dix nombres les plus importants.

Merci d'avance.

#!/usr/bin/perl

use strict;
use warnings;
use Text::Iconv;
my $converter = Text::Iconv->new("ISO-8859-1", " UTF-8");

my ($sec, $min, $heure, $jour, $mois,$annee, undef, undef, undef) = localtime();
$annee += 1900;
my (@tmp,%fields,$event,$trouve,$sujet,$k,$nombre,%stat);
my $annee_mois='*'.$annee.$mois.'*'; # récupération du critère année et mois
my $motif="SIMPLE";
chdir('/user/stats') || die ("Erreur chdir \n");
open RES,">/var/www/cgi-bin/data/top_ten.txt" or die "E/S : $!\n";
chomp(my @logs = glob($annee_mois));
foreach my $e(@logs){
open FILE,"$e" or warn "E/S : $!\n";
while (<FILE>){
chomp;
if ($_=~ /$motif/){
$_ =~s/[\[\]]/\|/g;
@tmp=split(/\|/,$_);
$event=$tmp[0];
$trouve=$tmp[4];
$sujet=lc($tmp[6]);
$sujet= $converter->convert($sujet);
$sujet=~ s/[\?éèêë]/e/g;
$sujet=~ s/[\%\"]//g;
$sujet=~ s/\b(des|du|de|d' ?|le|la|les|l' ?)//g;#mots vides
$sujet=~ s/(\s+|\t)/ /g;# remplace trop d'espace par un seul espace
$sujet=~ s/^\s+|\s+$//g; #suppression des espaces (debut et fin)
unless ($trouve==0){
$_=join (",",$event,$sujet) if $sujet ne "";
push @{$fields{$sujet}},$event;
}
}
}
}
# comptage de nombre de sujet identique
foreach $sujet (sort keys %fields) {
$nombre = 0;
@tmp = @{$fields{$sujet}};
foreach $event (@tmp) {
$nombre++;
}
push @{$stat{$sujet}},$nombre;
}
# tri par valeur et enregisterment dans le fichier de sortie
foreach $k (sort {$stat{$b} cmp $stat{$a}} keys %stat){
print RES "$k", map {",$_"} @{$stat{$k}},"\n";
}

______________________________FINConfiguration: Linux Fedora
Firefox 2.0.0.18


lami20j
06 janv.
Suivant
REPONSES
lami20j
06 janv.
deniss92
06 janv.
lami20j
06 janv.
deniss92
06 janv.
deniss92
06 janv.
lami20j
06 janv.
deniss92
06 janv.
lami20j
06 janv.
deniss92
06 janv.
lami20j
06 janv.
Version Web
Réalisé par RedShift
no save