"Três coisas são infinitas: o universo, a paciência do Breno e a estupidez humana. Mas, no que respeita ao universo, ainda não adquiri a certeza absoluta."
2012/11/24 Ole Peter Smith <ole....@gmail.com>: > > 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 _______________________________________________ Rio-pm mailing list Rio-pm@pm.org http://mail.pm.org/mailman/listinfo/rio-pm