[Cascavel-pm] Voltando...

Nelson Ferraz nferraz em phperl.com
Segunda Novembro 3 17:56:11 CST 2003


Adriano Vivan Borro wrote:
> Ae povo...
> 
> Voltei de viagem, finalmente. E agora voltei tb a tal da minha tabela q
> tah me complicando a vida...

Seja bem vindo!

> Apos algumas modificacoes e sugestoes da galera, fiz a seguinte tabela,
> cujas colunas significam, respectivamente, TAG    CLUSTER
> No_elem_cluster:
> 
> AaCT    S10    3
> CaCc    S5    8
> aCgg    S15    2
> cAcc    S22    4
> 
> E assim por diante...
> 
> O que eu queria eh ter uma saida (em forma de listagem) com as tags em
> ordem alfabetica (sendo maiuscula igual minuscula), os clusters em q ela
> aparece e seus respectivos numero de elementos. Ou seja (utilizando o
> exemplo acima):
> 
> AACT
> S10    3
> 
> ACGG
> S15    2
> 
> CACC
> S5    8
> S22    4

Supondo que a primeira tabela está em um arquivo texto, que tal comecar 
com algo bem simples:

while (<>) {
   push @array, uc($_);
}

foreach (sort @array) {
   print $_;
}

O resultado deste script será:

AACT    S10    3
ACGG    S15    2
CACC    S22    4
CACC    S5    8

Agora precisamos separar as tags em conjuntos, o que normalmente pode 
ser feito com um hash. Algo assim:

while (<>) {
   push @array, uc($_);
}

foreach (sort @array) {
   ($tag,$cluster,$num) = split(/\s+/,$_);
   $count->{$tag}->{$cluster} = $num
}

foreach $tag (keys %{$count}) {
   print "$tag\n";
   foreach $cluster (keys %{$count->{$tag}}) {
     print "  $cluster : ", $count->{$tag}->{$cluster}, "\n";
   }
}

O resultado deverá ser:

CACC
   S5 : 8
   S22 : 4
ACGG
   S15 : 2
AACT
   S10 : 3

É isto.

Para entender melhor a estrutura de hashes, você pode incluir o seguinte 
no final do programa:

use Data::Dumper;
print Dumper $count;

-- 
Nelson Ferraz

GNU BIS: http://www.gnubis.com.br




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