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

Daniel de Oliveira Mantovani daniel.oliveira.mantovani em gmail.com
Terça Fevereiro 22 09:47:44 PST 2011


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


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