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

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


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



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