#!/usr/bin/perl #ouverture en local use locale; #ouverture d'un fichier en position 0 dans cygwin béta 20, référencé ensuite par FILE open(FILE,"$ARGV[0]"); #ouverture d'un fichier en écriture, si ce fichier existait auparavant : l'ancien contenu est écrasé. open(OUT, ">resultat.txt"); #On crée un tableaux indicés (ou associatifs) #Ce genre de tableau est toujours précédés du caractère % #on crée donc un tableau indicés vide %dico=(); # tant qu'il y a des lignes à lire dans le fichier, on le lit. #La condition de la boucle est vrai on rentre donc dans le bloc d'instruction while ($ligne=) { #On sépare les lignes du fichier par un séparateur qui est: [\W] # Ce séparateur signifie qu'il va sélectionner un caractère qu'il n'est pas une #lettre, ni un chiffre. C'est le complément de \w #Grâce à ce séparateur, on se retrouve à avoir les mots de chaque ligne qui seront # stocker dans le tableau motsparligne my @motsparligne=split(/[\W]/,$ligne); # Pour chaque mot dans le tableau motsparligne, on fait: foreach my $mot (@motsparligne) { # ne permet de vérifier que 2 chaines de caractères sont différentes # cette condition permet de différencier les mots entre eux if ($mot ne "") { #On stocke le mot dans le tableau dico #ce tableau est incrémenté pour pouvoir compter la fréquence des mots dans le dico $dico{$mot}++; } } } #on fait un tri du dictionnaire # Il est triée par ordre de fréquence des mots foreach $mots (sort {$dico{$b} <=> $dico{$a} } keys %dico){ #on affiche les résultats: on indique d'abord le mot, suivi de sa fréquence print OUT $mots, ":", $dico{$mots}, "\n"; } # on ferme le fichier en lecture close(FILE); # on ferme le fichier en sortie close(OUT);