[Cascavel-pm] Outro probleminha....

Adriano Vivan Borro vivan em dim.fm.usp.br
Quarta Outubro 8 14:35:38 CDT 2003


Opa,

To quase chegando lah. O problema eh q eu precisava ordenar um arquivo
de 3 ou mais colunas. Tentei usar a rotina, mas nao deu certo. Digamos
que tenho entao, um arquivo com nomes e sobrenomes. Quero processa-lo de
tal forma que me retorne um arquivo com os nomes ordenados (aparecendo
uma unica vez), os sobrenomes relativos aos nomes, e a quantidade de
vezes que esse nome apareceu. Tb, nao entendi muito bem o exemplo do
flavio. O q este map faz? Enfim... Tah ae a rotina que eu escrevi, com a
ajuda d vcs:

#!/bin/perl
open (NOMES,"nomes.txt");
open (OUTPUT,">output.txt);

#rotina do flavio, q nao consegui rodar e nao entendi muito bem
#while (<NOMES>)
#{
#    chomp;
#    $h{$_}++};
#    print map { "$_ $h{$_}\n" } sort key %h;

while (<NOMES>)
{
    chomp;
    $count{$_}++;
}
@keys=sort {
    $_{$a} cmp $_{$b}
    } keys %count;
foreach (@keys) {
    print OUTPUT "$_\t$count{$_}\n";
    }
close OUTPUT;
close NOMES;

Bem... Resumindo...

Tenho o arquivo:

Zeh Silva
Scheila Carvalho
Zeh Tripeh
Claudia Shiffer
Zeh Maneh

E quero como saida:

Claudia    Shiffer    1
Scheila    Carvalho    1
Zeh    Maneh, Silva, Tripeh    3

Queria perguntar tb qual a vantagem d trabalhar com variaveis de sistema
($_  @_  .... ) jah q o nao preciso declarar variaveis no Perl.

Tks,
Adriano.

> Olá Adriano,
>
> Um hash é quase a mesma coisa que um array... mas no
> array o índice é obrigatoriamente numérico, ok? No
> hash pode ser uma palavra, um número... qualquer
> coisa. Até um x_salada...
>
> Um hash é útil para vc fazer pesquisas não
> sequenciais. Imagine que vc quer ler um arquivo com os
> seguintes registros:
>
> zeca:/home/zeca:/bin/bash
> joana:/home/joana:/bin/bash
>
> Ok, agora imagine que você tem MUITOS registros como
> esse. Imagine também que os nomes nunca se repetem
> (como uma chave primária de um banco de dados). Se
> você colocar os dados num array, vai ter que buscar
> registro a registro quando quiser apenas UM registro
> especifíco: a joana, por exemplo.
>
> Se você usar um hash, e o nome do usuário como chave,
> BINGO! Você só precisa chamar
> $hash{joana}
> para ter acessos aos dados da joana.
>
> Hashes não podem ser ordenados como arrays usando a
> função sort. Uma forma de fazer isso é criar um array
> das chaves do array com um
> my @array = keys($hash);
>
> e ordenar o array com sort:
>
> sort(@array);
>
> depois um loop:
>
> foreach $chave(@array) {
>
> print "$hash{$chave}\n";
>
> }
>
> a impressão estará ordenada.
>
> []´s
> Alceu
>  --- Adriano Vivan Borro <vivan em dim.fm.usp.br>
> escreveu: > Bem...
> >
> >  O hash possui apenas 1 indice ( eh isso mesmo ???
> > ). Como faco entao pra estar ordenando um arquivo
> > com,
> > digamos... 4 colunas. Estou querendo montar um Banco
> > de dados para trata-lo usando perl.....
> >
> > tks
> > []'s
> >
> > Nelson Ferraz wrote:
> >
>
> Yahoo! Mail - o melhor webmail do Brasil
> http://mail.yahoo.com.br
> _______________________________________________
> Cascavel-pm mailing list
> Cascavel-pm em mail.pm.org
> http://cascavel.pm.org/mailman/listinfo/cascavel-pm
>
> --------------------------
> Esta mensagem foi verificada
> pelo sistema de antivírus DIM e
> acredita-se estar livre de Virus.
> Virus data file v4296 created Oct 01 2003




Mais detalhes sobre a lista de discussão Cascavel-pm