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

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


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


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