[Rio-pm] Comparação de arquivos

breno breno em rio.pm.org
Domingo Novembro 25 19:53:50 PST 2012


Assim vcs me matam de vergonha =P

[]s

-b

2012/11/24 Blabos de Blebe <blabos em gmail.com>:
> "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.ufg em gmail.com>:
>>
>> On Nov 24, 2012 4:52 PM, "Aureliano Guedes" <guedes_1000 em 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: breno em rio.pm.org
>>> > To: rio-pm em pm.org
>>> > Subject: Re: [Rio-pm] Comparação de arquivos
>>> >
>>> > 2012/11/24 Aureliano Guedes <guedes_1000 em 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 em pm.org
>>> > http://mail.pm.org/mailman/listinfo/rio-pm
>>>
>>> _______________________________________________
>>> Rio-pm mailing list
>>> Rio-pm em pm.org
>>> http://mail.pm.org/mailman/listinfo/rio-pm
>>
>>
>> _______________________________________________
>> Rio-pm mailing list
>> Rio-pm em pm.org
>> http://mail.pm.org/mailman/listinfo/rio-pm
> _______________________________________________
> Rio-pm mailing list
> Rio-pm em pm.org
> http://mail.pm.org/mailman/listinfo/rio-pm


Mais detalhes sobre a lista de discussão Rio-pm