On Nov 24, 2012 4:52 PM, "Aureliano Guedes" <guedes_1...@hotmail.com> wrote: > > Breno, que ser meu orientador... hahaha...
se eu era reitor universitario, eu daria o grau de dr honoratis para o este nosso breno, pela sua competencia, vastoconhecimento e infinita paciencia de enseminar conhecimentos!!!! 0le > > Enfim, ficou assim http://pastebin.com/zrpLGwQs > > Ha algo que você mudaria??? > > > Date: Sat, 24 Nov 2012 09:45:41 -0200 > > > From: br...@rio.pm.org > > To: rio-pm@pm.org > > Subject: Re: [Rio-pm] Comparação de arquivos > > > > 2012/11/24 Aureliano Guedes <guedes_1...@hotmail.com>: > > > > > > Se não for ser muito chato, como faço para seguir a forma abaixo: > > > > > > > > >> 2) trocar de abordagem, fazendo seu parser ler linha a linha (sem > > >> modificar $/) e ir acumulando as linhas até encontrar um símbolo que > > >> indique nova entrada. > > > > > > seria algo do tipo: > > > > > > while (<$fh>){ > > > if(/primeira linha/){ > > > print $_; > > > } > > > elsif (/ultima linha/){ > > > #sair do loop > > > } > > > else { > > > print $_ > > > } > > > } > > > > > > > Algo como (atenção, código não testado): > > > > ---------------8<--------------- > > my %dados = (); > > my $mirna; > > my $acumulador; > > > > while (my $linha = <$fh>) { > > if ( $linha =~ m{tag magica (?<mirna>\S+)} ) { > > $dados{$mirna} = $acumulador if $mirna; > > $mirna = $+{mirna}; > > $acumulador = q(); > > } > > else { > > $acumulador .= $linha; > > } > > } > > > > use DDP; p %dados; > > > > --------------->8--------------- > > > > O que isso faz (ou deveria fazer: já mencionei que não testei? > > Programar a essa hora da manhã não é meu forte, então favor > > desconsiderar qualquer besteira): > > > > 1) le o arquivo linha por linha, atribuindo o valor de cada linha a > > $linha (sem usar $_) > > 2) sempre que encontrar a tag mágica que separa entradas (estou > > assumindo que a tag indica um novo registro que pode ser chave do seu > > hash de dados: > > 2.1) se já estiver com um registro em memória ($mirna), bota os dados > > acumulados ($acumulador) dentro do hash; > > 2.2) atribui à $mirna o novo registro encontrado. Note que estou > > usando grupos nomeados na regex, fazendo (?<tag>...) em vez de apenas > > (...). Isso funciona a partir do 5.10.0 e me permite acessar os > > valores agrupados na regex por nome dentro do hash %+. No caso, > > acessei o grupo (?<mirna>....) fazendo $+{mirna}; > > 2.2) zera o acumulador. > > 3) se não encontrar a tag mágica, vai acumulando os dados. Dentro > > desse 'else' vc pode fazer coisas como "next if $linha =~ /.../" caso > > não queira guardar alguma linha, por exemplo. > > 4) Depois do while vc pode inspecionar %dados para saber se está tudo ok. > > > > > > Entendeu? > > > > []s > > > > -b > > _______________________________________________ > > Rio-pm mailing list > > Rio-pm@pm.org > > http://mail.pm.org/mailman/listinfo/rio-pm > > _______________________________________________ > Rio-pm mailing list > Rio-pm@pm.org > http://mail.pm.org/mailman/listinfo/rio-pm
_______________________________________________ Rio-pm mailing list Rio-pm@pm.org http://mail.pm.org/mailman/listinfo/rio-pm