[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