Sou iniciante em Perl e estou com um problema. Dado dois arquivos txt contendo os seguintes textos, por exemplo:
ARQ1: ar ar
ARQ2: ar ar ar ar bola
Gostaria de contar a ocorrência de palavras de cada arquivo:
ARQ1:
ar = 2
ARQ2:
ar = 4
bola = 1
Escrevi este código:
#!/usr/bin/perl
my $dirname = $ARGV[0];
opendir(DIR, $dirname) or die "can't opendir $dirname: $!";
my %count_of;
while (defined($filename = readdir(DIR))) {
open (FILE, $dirname . $filename);
while (<FILE>) {
chomp;
$_ = lc $_; #lc = lowercase
$_ =~ s/\d+/ /g; # remove all numbers
$_ =~ s/[^a-zA-Z0-9'áéíóúàãõâêôçü]+/ /g;
foreach my $word ( split /\s+/, $_){
$count_of{$word}++;
}
}
#print "All words and their counts: \n";
foreach my $word (sort {$count_of{$b} <=> $count_of{$a} } keys %count_of)
{
print "$word : $count_of{$word}\n";
}
close (FILE);
}
closedir(DIR);
Porém, ele me retorna:
ar = 2
ar = 6 // aqui começa a leitura do segundo arquivo, o certo seria ar = 4.
bola = 1
Acho que o problema está no vetor word, que até então não está sendo reinicializado quando se abre um novo arquivo... mas não consegui reinicializá-lo... alguma sugestão?
Pergunta
Christiane Okamoto
Olá!
Sou iniciante em Perl e estou com um problema. Dado dois arquivos txt contendo os seguintes textos, por exemplo:
ARQ1: ar ar
ARQ2: ar ar ar ar bola
Gostaria de contar a ocorrência de palavras de cada arquivo:
ARQ1:
ar = 2
ARQ2:
ar = 4
bola = 1
Escrevi este código:
Porém, ele me retorna:
ar = 2
ar = 6 // aqui começa a leitura do segundo arquivo, o certo seria ar = 4.
bola = 1
Acho que o problema está no vetor word, que até então não está sendo reinicializado quando se abre um novo arquivo... mas não consegui reinicializá-lo... alguma sugestão?
Link para o comentário
Compartilhar em outros sites
2 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.