<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'>
Breno, que ser meu orientador... hahaha...<br><br>Enfim, ficou assim http://pastebin.com/zrpLGwQs<br><br>Ha algo que você mudaria??? <br><br><div><div id="SkyDrivePlaceholder"></div>> Date: Sat, 24 Nov 2012 09:45:41 -0200<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 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></div>                                     </div></body>
</html>