2015-02-04 3 views
0

Я хочу рассчитать происхождение каждого слова в текстовом файле с помощью 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"; 
} 

Когда я запускаю сценарий, я получаю результат первого цикла в качестве результата. Два других не возвращают никакого выхода.

+2

, потому что первый цикл ** ** потребляет всего из входных линий от '$ file'. – jm666

ответ

3

В вашем первом цикле вы читаете все строки файла с помощью оператора <>, что означает, что вы существенно продвигаете указатель файла до конца файла.

В вашем втором цикле вы снова используете оператор <>, но безрезультатно - вы использовали весь файл в своем предыдущем цикле, так что больше ничего не осталось прочитать. %freq поэтому не инициализирован в вашем конечном цикле.

Я рекомендовал бы сливаясь петли 1 и 2, как это:

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

Это работает! Спасибо :) – Somar

Смежные вопросы