[Rio-pm] Comparação de arquivos

Aureliano Guedes guedes_1000 em hotmail.com
Domingo Novembro 25 11:42:37 PST 2012


> "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."

Albert Einstein não conhecia essa variável na época.

> From: blabos em gmail.com
> Date: Sat, 24 Nov 2012 22:03:50 -0200
> To: rio-pm em pm.org
> Subject: Re: [Rio-pm] Comparação de arquivos
> 
> "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
 		 	   		  
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/rio-pm/attachments/20121125/b88852ba/attachment.html>


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