[Cascavel-pm] Outro probleminha....
Flavio S. Glock
fglock em pucrs.br
Sexta Outubro 3 16:41:06 CDT 2003
Adriano Vivan Borro wrote:
>
> Oi, lista.
>
> Esse continua sendo basico, mas enfim... Nao sei c estou certo, mas pelo que verifiquei na
> documentacao, a funcao sort() do Perl ordena apenas arrays. Eu preciso ordenar uma lista. O que
> posso usar para isso?
>
> Explicando melhor o meu problema... Digamos que tenho uma lista de nomes. E a cada execucao da
> minha rotina, leio apenas 1 nome. Ae, apos o script ler todo meu arquivo de entrada, me retorne
> os nomes ordenados e qtos vezes apareceu o mesmo nome.
>
> Bem.. Nao sei c me expressei muito bem. Vejamos entao um exemplo pratico:
>
> Arquivo de Entrada:
>
> Joseh
> Claudia
> Joseh
> Lucia
> Adriano
> Maneh
> Claudia
> Lucia
> Joseh
> Joseh
> Maneh
>
> Arquivo de Saida:
>
> Adriano 1
> Claudia 2
> Lucia 2
> Joseh 4
> Maneh 2
>
> Gostaria d nao usar sort com arrays, justamente pq minha lista eh muito grande e pode tornar o
> procedimento ineficiente.
- em uma linha:
perl -e ' while(<>){ chomp; $h{$_}++ }; print map { "$_ $h{$_}\n" } sort
keys %h ' lista
Adriano 1
Claudia 2
Joseh 4
Lucia 2
Maneh 2
- 'lista' é o nome do arquivo, com um nome por linha;
- a variável %h é um índice de nomes, e guarda o número de
ocorrências, utilizando ++.
- o espaço em memória é ocupado somente uma vez por cada nome;
- depois que acaba o arquivo (while), o índice é ordenado (sort),
formatado (map) e impresso (print).
- Flavio S. Glock
Mais detalhes sobre a lista de discussão Cascavel-pm