通过Perl计算文本文件中每个单词的出现次数

时间:2015-02-04 12:04:34

标签: perl

我想使用Perl计算文本文件中每个单词的出现次数。这是剧本:

#! /usr/local/bin/perl -w
#Exercice 8

#Ouvrir le fichier
open my($file), '<', 'file.txt' 
or die "Erreur lors de l'ouverture";

#Afficher le fichier  
while( my $line = <$file> ) {
        chomp($line) ;
        print "$line \n";
}

#Calculer le nombre d'apparaition
while( my $line = <$file> ){
foreach $word (split(' ',$line)){
    $freq{$word}++;
}
}

#Afficher les mots en ordre
foreach $word (sort keys %freq) {
print "$word $freq{$word}\n";
}

当我运行脚本时,我只得到第一个循环的结果。 其他两个人不会返回任何输出。

1 个答案:

答案 0 :(得分:3)

在第一个循环中,您通过<>运算符读取所有文件的行,这意味着您基本上将文件指针前进到文件的末尾。

在你的第二个循环中,你再次使用<>运算符,但无济于事 - 你已经在前一个循环中使用了整个文件,所以没有别的东西可以读了。因此%freq在最后一个循环中未初始化。

我建议合并循环1和2,如下所示:

while ( my $line = <$file> ) {
     chomp($line);
     print $line; 
     foreach $word (split(' ', $line)) {
         $freq{$word}++;
     }
}