[Cascavel-pm] Balance Line
Leonardo Gerheim
general_andrade em yahoo.com.br
Terça Abril 20 21:34:14 PDT 2010
Olá pessoal; * Sou iniciante em Perl
Já construi uma aplicação que atendia nossas nessecidades, entretanto os arquivos para análise ficaram maiores e a aplicação passou a não mais satisfazer, vou explicar. O motivo é porque a aplicação para fazer as comparações e contagens usava como base arquivos de Kb e Mb no máximo, hoje trabalhamos com arquivos muito maiores.
O que preciso é fazer um balance line, pois ele vai ler o arquivo uma única vez, diferentemente da aplicação que desenvolvi que lia o arquivo muitas vezes.
Funciona assim, tenho dois arquivos ordenados, um com 3 colunas(arquivo de análise), ele possui várias linhas com a primeira coluna igual e o segundo arquivo(arquivo de comparação) que possui uma coluna apenas com uma incidência apenas da coluna do primeiro arquivo.
Então eu leio cada linha de ambos os arquivos e comparo, caso sejam iguais eu conto os valores das colunas 2 e 3 do arquivo1, caso diferentes eu pego a próxima linha do arquivo de comparação.
O código da função responsável por essa parte está assim após essa alterção que expliquei que preciso fazer, mas não funciona. Alguém pode me dar uma luz?
Abraço.
sub Alel_A{
$contCol1=0;
$contCol2=0;
open(FILE1,$ARGV[1]); #Arquivo que será analisados
open(FILE2,$ARGV[0]); # Arquivo para comparação
@file2=<FILE2>; #usei um vetor para usar o shift
$compara=shift(@file2);
chop $snp;
while (<FILE1>){
if($_ =~ m/$compara/){
$contCol1++ if $_ =~ m/A\s*A/;
$ContCol2++ if $_ =~ m/A\s*B/;
}elsif($_ !=~ m/$compara/){
$snp=shift(@file2);
chop $compara;
}
}
print "TENHO UMA FUNÇÃO QUE CALCULA A FREQUENCIA DESSAS INCIDÊNCIAS AQUI";
}
O algoritmo seria mais ou menos isso que tenho em mente, mas não consegui êxito.
abrir arquivo_a
abrir arquivo_b
ler registro_a
ler registro_b
enquanto (não fim_arquivo_a) e (não fim_arquivo_b)
se (chave_a = chave_b)
processa registros
ler registro_b
senão se (chave_a < chave_b)
ler registro_a
senão
ler registro_b
fim_se
fim_se
fim_enquanto
fechar arquivo_a
fechar arquivo_b
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/cascavel-pm/attachments/20100420/fe36faca/attachment.html>
Mais detalhes sobre a lista de discussão Cascavel-pm