[Cascavel-pm] Res: Res: Acesso aleatório à arquivos

Fernando Corrêa de Oliveira fernandocorrea em gmail.com
Terça Fevereiro 22 09:53:16 PST 2011


tá bom então...

perl -F, -nalE'push(@{$z{shift em F}}, em F);END{say"$_ => ".join",",@{$z{$_}}for keys%z}' arquivo.txt

Em 22/02/2011, às 14:47, Daniel de Oliveira Mantovani escreveu:

> Fernando, eu comecei a fazer a minha tacada, quando você escreveu o
> seu primeiro código. Então o golf é baseado no seu primeiro código.
> 
> "perl -F, -nale 'push @{ $pessoa{$F[0]} }, @F[1 .. $#F]; END{print "$_
> => ", join ", ", @{ $pessoa{$_} } for keys %pessoa}' arquivo.txt"
> 
> 2011/2/22 Daniel de Oliveira Mantovani <daniel.oliveira.mantovani em gmail.com>:
>> Fernando, sem negrito...
>> 
>> perl -nale '@x=split/,/,$_;push(@{$z->{shift
>> @x}}, em x);END{for$a(keys%{$z}){print"$a => ".join",",@{$z->{$a}}}}'
>> arquivo.txt
>> 
>> 2011/2/22 Fernando Corrêa de Oliveira <fernandocorrea em gmail.com>:
>>> Bom, vou ser o primento então...
>>> Minha 1a tacada:
>>> 
>>> perl -F, -nalE'push@{$a{$F[0]}},$F[1];push@{$b{$F[0]}},$F[2];END{say"$_ => ",join(", ",@{$a{$_}}),"$/\t",join", ",@{$b{$_}}for keys%b}' arquivo.txt
>>> 
>>> 
>>> Em 22/02/2011, às 14:13, Blabos de Blebe escreveu:
>>> 
>>>>> Vocês acredita que one line perl deveria ser abolido?
>>>> 
>>>> Dos códigos de terceiros que eu tenho que dar manutenção? Imagina...
>>>> 
>>>> 2011/2/22 Leonardo Ruoso <leonardo.ruoso em gmail.com>:
>>>>> Ricardo,
>>>>> 
>>>>> Essa não seria a típica aplicação do perl como shell script?
>>>>> 
>>>>> Não é uma aplicação. Não faria sentido usar OO, SOA ou qualquer outro
>>>>> paradigma recomendado para o desenvolvimento de aplicações.
>>>>> 
>>>>> Não vejo equivoco nesse tipo de código como resolução para esse tipo de
>>>>> problema.
>>>>> 
>>>>> Vocês acredita que one line perl deveria ser abolido?
>>>>> 
>>>>> Atenciosamente,
>>>>> 
>>>>> Leonardo Ruoso (CE1921JP)
>>>>> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
>>>>> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
>>>>> . .
>>>>> leonardo em ruoso.com · (11) 3522-9612 · (85) 8787-0312
>>>>> http://leonardo.ruoso.com · http://twitter.com/LeonardoRuoso
>>>>> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
>>>>> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
>>>>> . .
>>>>> Leonardo Ruoso · Gerente de Projetos · Analista de Sistemas
>>>>> Comunicação Social/Jornalismo - UFC/2006 · Telecomunicações - ETFCE/1998
>>>>> Internet e inovação tecnológica deste 1996
>>>>> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
>>>>> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
>>>>> . .
>>>>> 
>>>>> 
>>>>> 2011/2/22 Ricardo Stock <ricardostock em bol.com.br>
>>>>>> 
>>>>>> Fernando parabens pelo código.
>>>>>>  Perfeito, lindo funcional e inelegivel para meros humanos :-) tipica
>>>>>> daqueles que falam que o perl é um monte de codigo bizonho.
>>>>>> 
>>>>>> mas ficou lindo, Parabens.
>>>>>> 
>>>>>> Esse codigo vai ficar guardado na minha coleção. :-)
>>>>>> 
>>>>>> Ricardo
>>>>>> 
>>>>>> ----- Original Message -----
>>>>>> From: Fernando Corrêa de Oliveira
>>>>>> To: Cascavel Perl Mongers
>>>>>> Sent: Tuesday, February 22, 2011 11:07 AM
>>>>>> Subject: Re: [Cascavel-pm] Res: Res: Acesso aleatório à arquivos
>>>>>> Não por isso!
>>>>>> perl -F, -nale 'push @{ $pessoa{$F[0]}->{A} }, $F[1]; push @{
>>>>>> $pessoa{$F[0]}->{B} }, $F[2]; END{print "$_ => ", join(", ", @{
>>>>>> $pessoa{$_}->{A} }), "$/\t", join(", ", @{ $pessoa{$_}->{B} }), for keys
>>>>>> %pessoa}' arquivo.txt
>>>>>> 
>>>>>> Em 22/02/2011, às 10:58, Leonardo Gerheim escreveu:
>>>>>> 
>>>>>> A resposta do Fernando foi muito d+, Show de bola mesmo.
>>>>>> 
>>>>>>     Mas devido a forma que chegou o email para vocês, acho que não
>>>>>> entenderam como deveria ser a disposição das notas na saída, porque dessa
>>>>>> forma que vocês fizeram eu também fiz, não tão impressionantemente em uma
>>>>>> linha.
>>>>>>     A disposição das notas dever ser a nota A (NEGRITO) em cima na nota B
>>>>>> (NORMAL) assim:
>>>>>> 
>>>>>> INPUT:
>>>>>> 
>>>>>> joao,1,1
>>>>>> joao,2,1
>>>>>> joao,1,2
>>>>>> maria,1,1
>>>>>> maria,2,1
>>>>>> maria,1,2
>>>>>> 
>>>>>> OUTPUT:
>>>>>> 
>>>>>> joao => 1,2,1
>>>>>>             1,1,2
>>>>>> 
>>>>>> maria => 1,2,1
>>>>>>               1,1,2
>>>>>> 
>>>>>> 
>>>>>>     Entenderam? Por isso perguntei como faria para avançar e recuar uma
>>>>>> linha.
>>>>>>     Vlw pela força até agora.
>>>>>> 
>>>>>> 
>>>>>> ________________________________
>>>>>> De: Renato Santos <renato.cron em gmail.com>
>>>>>> Para: Cascavel Perl Mongers <cascavel-pm em pm.org>
>>>>>> Enviadas: Terça-feira, 22 de Fevereiro de 2011 10:40:37
>>>>>> Assunto: Re: [Cascavel-pm] Res: Acesso aleatório à arquivos
>>>>>> 
>>>>>> Fernando, funcionou!
>>>>>> 
>>>>>> joao => 10, 15, 10, 10, 8, 9
>>>>>> maria => 7, 9, 6, 9, 4, 10
>>>>>> 
>>>>>> O que o perl (GOLF =P) do Fernando faz é utilizar os argumentos do perl já
>>>>>> dizendo que é para ler um arquivo (-n) separar por virgula (-F,) jogando
>>>>>> cada item da linha para a @F (-a) remove o "enter" em cada linha (usando - l
>>>>>> sem passar nenhum código) e o código em si, -e .
>>>>>> Coragem escrever isso no celular eim! Aja paciencia!
>>>>>> 
>>>>>> ps: legal o uso do END {}, nunca tinha pensando nisso.
>>>>>> 2011/2/22 Fernando Oliveira <fernandocorrea em gmail.com>
>>>>>>> 
>>>>>>> Não é q faltou o for?! Pq ninguem me avisou?!
>>>>>>> 
>>>>>>> Em 22/02/2011 10:17, "Fernando Oliveira" <fernandocorrea em gmail.com>
>>>>>>> escreveu:
>>>>>>>> 
>>>>>>> perl -F, -nale 'push @{ $pessoa{$F[0]} }, @F[1 .. $#F]; END{print "$_ =>
>>>>>>> ", join ", ", @{ $pessoa{$_} } for keys %pessoa}' arquivo.txt
>>>>>>>> 
>>>>>>>> Codigo escrito no cel e não testado!
>>>>>>>> GOLF?!
>>>>>>>> 
>>>>>>>> Em 22/02/2011 09:36, "Leonardo Gerheim" <general_andrade em yahoo.com.br>
>>>>>>>> escreveu:
>>>>>>>> 
>>>>>>>>> Agradeço à todos pelas respostas. Mas realmente não consegui me
>>>>>>>>> expressar,
>>>>>>>>> como coloquei um exemplo não específico ficou realmente complicado o
>>>>>>>>> entendimento. A minha intenção é a seguinte:
>>>>>>>>> Eu quero poder movimentar dentro do arquivo, ou seja, avançar e
>>>>>>>>> recuar uma
>>>>>>>>> uma linha do arquivo.
>>>>>>>>> 
>>>>>>>>> ex de INPUT:
>>>>>>>>> 
>>>>>>>>> joao,10,15
>>>>>>>>> joao,10,10
>>>>>>>>> joao,8,9
>>>>>>>>> maria,7,9
>>>>>>>>> maria,6,9
>>>>>>>>> maria,4,10
>>>>>>>>> 
>>>>>>>>> onde temos respectivamente o nome do aluno a nota A e a nota B, mas
>>>>>>>>> queremos
>>>>>>>>> gerar um OUTPUT:
>>>>>>>>> 
>>>>>>>>> joao 10,10,8
>>>>>>>>> 15,10,9
>>>>>>>>> maria 7,6,4
>>>>>>>>> 9,9,10
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> Ou seja, uma nota após a outra.
>>>>>>>>> 
>>>>>>>>> Para isso, pensei em ler a primeira linha, imprimir as notas notas
>>>>>>>>> uma
>>>>>>>>> embaixo da outra, logoa após isso teria que retornar à primneira
>>>>>>>>> linha para
>>>>>>>>> imprimir o segundo conjunto de notas, enquanto o nome do aluno for o
>>>>>>>>> mesmo. O
>>>>>>>>> que não consegui fazer é essa parte de movimentar dentro do arquivo,
>>>>>>>>> avançando e
>>>>>>>>> recuando em arquivos que tenham registros de tamanho diferente.
>>>>>>>>> Caso existe um algoritmo mais simples por for me ajudem a montá-lo,
>>>>>>>>> mas de
>>>>>>>>> qualquer forma me expliquei como avançar e recuar linhas.
>>>>>>>>> 
>>>>>>>>> Att.
>>>>>>>>> 
>>>>>>>>> P.S: A solução do Eden na sua última resposta resolveu a última
>>>>>>>>> questão, eu que
>>>>>>>>> me expressei totalmente mal.
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> ________________________________
>>>>>>>>> De: Eden Cardim <edencardim em gmail.com>
>>>>>>>>> Para: Cascavel Perl Mongers <cascavel-pm em pm.org>
>>>>>>>>> Enviadas: Terça-feira, 22 de Fevereiro de 2011 9:04:35
>>>>>>>>> Assunto: Re: [Cascavel-pm] Acesso aleatório à arquivos
>>>>>>>>> 
>>>>>>>>>>>>>> "Leonardo" == Leonardo Gerheim <general_andrade em yahoo.com.br>
>>>>>>>>>>>>>> writes:
>>>>>>>>> 
>>>>>>>>> Leonardo> Olá pessoal, Preciso ler um arquivo e quando em uma
>>>>>>>>> Leonardo> determinada linha contiver um valor, ele pular para a
>>>>>>>>> Leonardo> próxima linha e quando encontrar um segundo valor não
>>>>>>>>> Leonardo> imprimir mais nada, como no exemplo abaixo:
>>>>>>>>> 
>>>>>>>>> Não ficou claro o que você quer aqui, mostra um exemplo da entrada e
>>>>>>>>> da
>>>>>>>>> saída esperada.
>>>>>>>>> 
>>>>>>>>> Leonardo> joao- não imprimir
>>>>>>>>> Leonardo> maria- não imprimir
>>>>>>>>> Leonardo> antonio- não imprimir
>>>>>>>>> Leonardo> a- não imprimir
>>>>>>>>> Leonardo> linguagem- IMPRIMIR
>>>>>>>>> Leonardo> programacao- IMPRIMIR
>>>>>>>>> Leonardo> b- não imprimir
>>>>>>>>> Leonardo> elizabeth- não imprimir
>>>>>>>>> Leonardo> kenia- não imprimir
>>>>>>>>> 
>>>>>>>>> Isso é a entrada ou a saída do programa?
>>>>>>>>> grep não resolve?
>>>>>>>>> ,----[ cat test_data ]
>>>>>>>>> | joao
>>>>>>>>> | maria
>>>>>>>>> | antonio
>>>>>>>>> | a
>>>>>>>>> | linguagem
>>>>>>>>> | programacao
>>>>>>>>> | b
>>>>>>>>> | elizabeth
>>>>>>>>> | kenia
>>>>>>>>> `----
>>>>>>>>> ,----[ cat test_data | grep "linguagem\|programacao" ]
>>>>>>>>> | linguagem
>>>>>>>>> | programacao
>>>>>>>>> `----
>>>>>>>>> 
>>>>>>>>> Leonardo> Eu consegui fazer um script para isso, entretanto
>>>>>>>>> Leonardo> somente consegui que ele funcione, quando o amanho dos
>>>>>>>>> Leonardo> registros são iguais. Como faço para resolver esse
>>>>>>>>> Leonardo> problema tendo um arquivo com registros de tamnho
>>>>>>>>> Leonardo> diferente?
>>>>>>>>> 
>>>>>>>>> Se você mostrar o código, com um exemplo da execução, fica mais fácil
>>>>>>>>> te
>>>>>>>>> ajudar.
>>>>>>>>> 
>>>>>>>>> --
>>>>>>>>> Eden Cardim
>>>>>>>>> Software Engineer
>>>>>>>>> +55 73 9986-3963
>>>>>>>>>  edencardim.com
>>>>>>>>> _______________________________________________
>>>>>>>>> Cascavel-pm mailing list
>>>>>>>>>  Cascavel-pm em pm.org
>>>>>>>>>  http://mail.pm.org/mailman/listinfo/cascavel-pm
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> _______________________________________________
>>>>>>> Cascavel-pm mailing list
>>>>>>> Cascavel-pm em pm.org
>>>>>>> http://mail.pm.org/mailman/listinfo/cascavel-pm
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> --
>>>>>> Renato Santos
>>>>>> http://www.renatocron.com/blog/
>>>>>> 
>>>>>>  _______________________________________________
>>>>>> Cascavel-pm mailing list
>>>>>> Cascavel-pm em pm.org
>>>>>> http://mail.pm.org/mailman/listinfo/cascavel-pm
>>>>>> 
>>>>>> Just Another Perl Hacker
>>>>>> Fernando Corrêa de Oliveira
>>>>>> fernandocorrea em gmail.com
>>>>>> 
>>>>>> ________________________________
>>>>>> 
>>>>>> _______________________________________________
>>>>>> Cascavel-pm mailing list
>>>>>> Cascavel-pm em pm.org
>>>>>> http://mail.pm.org/mailman/listinfo/cascavel-pm
>>>>>> 
>>>>>> _______________________________________________
>>>>>> Cascavel-pm mailing list
>>>>>> Cascavel-pm em pm.org
>>>>>> http://mail.pm.org/mailman/listinfo/cascavel-pm
>>>>> 
>>>>> 
>>>>> _______________________________________________
>>>>> Cascavel-pm mailing list
>>>>> Cascavel-pm em pm.org
>>>>> http://mail.pm.org/mailman/listinfo/cascavel-pm
>>>>> 
>>>> _______________________________________________
>>>> Cascavel-pm mailing list
>>>> Cascavel-pm em pm.org
>>>> http://mail.pm.org/mailman/listinfo/cascavel-pm
>>> 
>>> Just Another Perl Hacker
>>> Fernando Corrêa de Oliveira
>>> fernandocorrea em gmail.com
>>> 
>>> _______________________________________________
>>> Cascavel-pm mailing list
>>> Cascavel-pm em pm.org
>>> http://mail.pm.org/mailman/listinfo/cascavel-pm
>>> 
>> 
>> 
>> 
>> --
>> "If you’ve never written anything thoughtful, then you’ve never had
>> any difficult, important, or interesting thoughts. That’s the secret:
>> people who don’t write, are people who don’t think."
>> 
> 
> 
> 
> -- 
> "If you’ve never written anything thoughtful, then you’ve never had
> any difficult, important, or interesting thoughts. That’s the secret:
> people who don’t write, are people who don’t think."
> _______________________________________________
> Cascavel-pm mailing list
> Cascavel-pm em pm.org
> http://mail.pm.org/mailman/listinfo/cascavel-pm

Just Another Perl Hacker
Fernando Corrêa de Oliveira
fernandocorrea em gmail.com



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