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