[Rio-pm] Mudando de formato

Blabos de Blebe blabos em gmail.com
Sábado Março 31 09:02:52 PDT 2012


> achei isso imprecionante.

É atribuição de lista. Você pode atribuir uma lista a um array ( e
vice-versa, certo? ;) )

> mas esse map, ja li na perldoc aqui ->

Ok, o map e o seu primo grep às vezes são meio confusos.

Ex.:

@destination = map { operations } @source

O map toma como entrada a lista @source, aplica operations em cada
elemento dela, e finalmente retorna os elementos modificados para o
array @destination.

Só isso.

no exemplo eu usei pra aplicar o cast numérico em todos os elementos.

[]'s

2012/3/31 Aureliano Guedes <guedes_1000 em hotmail.com>:
> Eu sei que o split que separou tudo, mas "my ( $first, $second ) = ( $piece
> =~ /\d{2}/g );" é que joga automaticamente o primeiro digito para um e o
> segundo para outro...
> achei isso imprecionante.
>
> Bem join e split eu conheço bem, ja os usei a uns 4 meses atras, logo depois
> de ter começado a "Perlgramar" ^^.
>
> mas esse map, ja li na perldoc aqui ->
> http://perldoc.perl.org/functions/map.html e apesar de bem explicado não
> entrou na minha cabeça.
>
> bem mas to tentando fazer o programa aqui de outra forma, ja entendi algumas
> coisas vendo o seu, mas o seu gera umas coisas desnecessaria no output.
>
> Bem, vou tentando, qualquer coisa eu posto aqui esperando ajuda...
>
>> From: tiago.peczenyj em gmail.com
>> Date: Sat, 31 Mar 2012 10:21:23 -0300
>
>> To: rio-pm em pm.org
>> Subject: Re: [Rio-pm] Mudando de formato
>>
>> Outra dica é exercitar
>>
>> se vc não entendeu parte do codigo abra um editor de texto, coloque o
>> trecho e de valores as variaveis, vendo o que acontece no final
>> rodando o programa. enche de print num primeiro momento, depois vc
>> refina conforme vai aprendendo.
>>
>> On Sat, Mar 31, 2012 at 10:13 AM, Blabos de Blebe <blabos em gmail.com>
>> wrote:
>> >> Desculpa, floodar, mas aqui nesse trecho
>> >> ...
>> >> como ele pega de cada linha os valores como esse
>> >> 0303 0303 0101 1011 0304
>> >
>> > Errado.
>> >
>> > Quem separa a linha em 'peças' é a linha:
>> >
>> > my @pieces = split /\s+/, $line;
>> >
>> > ...que perldoc -f split, quebra a linha nos 'espaços':
>> >
>> > @pieces = ( '001,', '0303', '0303', '0101', '1011', '0304' );
>> >
>> >
>> >> 0303 0303 0101 1011 0304
>> >>
>> >> e seleciona que a cada 2 digitos primeiro é do $first e o segundo do
>> >> $second.
>> >>
>> >> sei que esta exatamente nessa linha
>> >>
>> >>
>> >> my ( $first, $second ) = ( $piece =~ /\d{2}/g );
>> >>
>> >> a resposta, mas nunca teria pensado que isso era de certa forma
>> >> automatico.
>> >
>> > Não existe mágica, existe perldoc perlre.
>> >
>> > Procure por contexto. Na verdade foi a primeira vez que eu usei isso
>> > na vida real.
>> >
>> >
>> >> você me explicaria o que quer dizer essa linha:
>> >>
>> >> say join( ' ', map { 0 + $_ } @first );
>> >
>> > perldoc -f map
>> > perldoc -f join
>> >
>> > No modern perl ele fala sobre 'casting';
>> >
>> > ...
>> >
>> > Você deve notar que eu não estou respondendo diretamente. É porque as
>> > respostas são bizarramente óbvias pra quem *leu a documentação*.
>> >
>> > Fica a dica visite as docs dos itens:
>> >
>> > perlio, perlre,
>> > perldoc -f split
>> > perldoc -f map
>> > perldoc -f join
>> >
>> >
>> >> Eu to aqui tentando entender seu codigo, e fazer o meu proprio,
>> >
>> > Suas perguntas são típicas de quem está completamente perdido. Nesse
>> > ponto, não tente entender o código, você até pode conseguir, mas vai
>> > levar muito mais tempo do que se parar pra aprender o básico da
>> > linguagem.
>> >
>> >
>> > Leia a documentação, leia o modern perl. Depois volte e pergunte.
>> >
>> > Bônus (eu to muito bonzinho :) ):
>> >
>> > https://metacpan.org/module/POD2::PT_BR
>> >
>> >
>> > []'s
>> >
>> >
>> > 2012/3/31 Aureliano Guedes <guedes_1000 em hotmail.com>:
>> >> Desculpa, floodar, mas aqui nesse trecho
>> >>
>> >>
>> >>  my ( @first, @second );
>> >>     foreach my $piece ( @pieces ) {
>> >>         my ( $first, $second ) = ( $piece =~ /\d{2}/g );
>> >>
>> >>         push @first, $first;
>> >>         push @second, $second;
>> >>     }
>> >>
>> >> se eu tenho esse arquivo
>> >>
>> >>
>> >> Pop
>> >> 001,    0303 0303 0101 1011 0304
>> >> 002,    0303 0003 0101 0410 0405
>> >> 003,    0303 0305 0101 1013 0304
>> >> 004,    0103 0304 0102 0207 0104
>> >> Gra,    0203 0304 0202 0207 0105
>> >>
>> >> como ele pega de cada linha os valores como esse
>> >>
>> >>
>> >> 0303 0303 0101 1011 0304
>> >>
>> >> e seleciona que a cada 2 digitos primeiro é do $first e o segundo do
>> >> $second.
>> >>
>> >> sei que esta exatamente nessa linha
>> >>
>> >>
>> >> my ( $first, $second ) = ( $piece =~ /\d{2}/g );
>> >>
>> >> a resposta, mas nunca teria pensado que isso era de certa forma
>> >> automatico.
>> >>
>> >> ________________________________
>> >> From: guedes_1000 em hotmail.com
>> >> To: rio-pm em pm.org
>> >> Date: Sat, 31 Mar 2012 11:34:43 +0000
>> >>
>> >> Subject: Re: [Rio-pm] Mudando de formato
>> >>
>> >> Valeu mesmo, monges.
>> >> Blabos, obrigado mesmo, mas na verdade a parte que eu pedi era so a
>> >> mais
>> >> dificil, mas
>> >> por que aind atem o topo dos arquivos.
>> >>
>> >> Eu to aqui tentando entender seu codigo, e fazer o meu proprio,
>> >> você me explicaria o que quer dizer essa linha:
>> >>
>> >> say join( ' ', map { 0 + $_ } @first );
>> >>
>> >>> From: blabos em gmail.com
>> >>> Date: Fri, 30 Mar 2012 14:18:45 -0300
>> >>> To: rio-pm em pm.org
>> >>> Subject: Re: [Rio-pm] Mudando de formato
>> >>>
>> >>> Hum,
>> >>>
>> >>> O segundo link foi colado errado. O certo seria:
>> >>>
>> >>> http://norvig.com/21-days.html
>> >>>
>> >>> 2012/3/30 Nuba Princigalli <nuba em fastmail.fm>:
>> >>> > Olá Aureliano,
>> >>> >
>> >>> > Você também pode levar seu problema quando fizermos o próximo
>> >>> > hackathon
>> >>> > +
>> >>> > code clinic! Agora, tanto num code clinic quanto aqui na lista, a
>> >>> > expectativa é que você pelo menos tente quebrar o problema antes, e
>> >>> > peça
>> >>> > ajuda no que tiveHumr dificuldade.
>> >>> >
>> >>> > Esse processo de sair duma descrição em linguagem natural de um
>> >>> > problema
>> >>> > e
>> >>> > chegar numa implementação em linguagem de programação, tomando
>> >>> > decisões
>> >>> > de
>> >>> > ferramentas, paradigmas, etc. no caminho, nem sempre é trivial, e
>> >>> > obviamente
>> >>> > esse "trivial" depende também da sua bagagem. Se está difícil dar o
>> >>> > passo
>> >>> > largo de uma vez só, tente dar um passo intermediário, por exemplo,
>> >>> > escrevendo em pseudo-código, fazendo diagramas, ou qualquer outra
>> >>> > técnica
>> >>> > que te ajude a organizar o pensamento.
>> >>> >
>> >>> > Acho os links que o Blabos te indicou bons pontos de partida. Também
>> >>> > sugiro
>> >>> > ler e dissecar pacientemente a solução que o Blabos te enviou, até
>> >>> > você
>> >>> > entender o que está acontecendo ali. Perldoc perlfunc são seus
>> >>> > amigos, e
>> >>> > pode perguntar aqui também.
>> >>> >
>> >>> > Sucesso na jornada! Precisando de ajuda, estamos aqui! :)
>> >>> >
>> >>> > Nuba Princigalli
>> >>> >
>> >>> >
>> >>> > On Fri, Mar 30, 2012, at 12:43 PM, Blabos de Blebe wrote:
>> >>> >
>> >>> > Aureliano, querido amigão, o tio Blabos está de bom humor hoje e vai
>> >>> > te
>> >>> > ajudar.
>> >>> >
>> >>> > Pelo que eu sei que você não é da área de informática, e não foi
>> >>> > treinado
>> >>> > para resolver o que você está tentando resolver, ponto pra você.
>> >>> >
>> >>> > Mas pelo que eu sinto, você também não está fazendo o dever de casa.
>> >>> > É
>> >>> > comum
>> >>> > que pessoas de outras áreas, ao se deparar com programação, saiam
>> >>> > desesperadamente 'caçando' tutoriais sobre 'como programar da noite
>> >>> > pro
>> >>> > dia'. Esquece, isso não vai acontecer.
>> >>> >
>> >>> > A sua dúvida não é um problema de linguagem, mas sim de como dar os
>> >>> > passos
>> >>> > necessários para resolver o problema. Isso leva mais tempo pra
>> >>> > aprender,
>> >>> > do
>> >>> > que descobrir os comandos necessários.
>> >>> >
>> >>> > Sugiro fortemente que vc leia
>> >>> >
>> >>> > http://www.modernperlbooks.com/mt/index.html
>> >>> >
>> >>> > http://www.modernperlbooks.com/mt/index.html
>> >>> >
>> >>> > http://www.catb.org/~esr/faqs/smart-questions.html
>> >>> >
>> >>> > ...antes de continuar com qualquer código.
>> >>> >
>> >>> > Nós estaremos aqui pra te apoiar e te ajudar, mas vc ainda não sabe
>> >>> > nem
>> >>> > quais são as perguntas. Não adianta a gente dar as respostas.
>> >>> >
>> >>> >
>> >>> > Segue abaixo um naco de código que ilustra mais ou menos como
>> >>> > resolver
>> >>> > esse
>> >>> > problema (deve ter uns erros no meio), de uma forma mais ou menos
>> >>> > didática
>> >>> > (foco nos passos).
>> >>> >
>> >>> > Provavelmente os outros monges resolvem isso em menos de 50
>> >>> > caracteres.
>> >>> > Golf? :)
>> >>> >
>> >>> >
>> >>> > Não se assuste. Não desista. Mas comece a construir a sua casa pelo
>> >>> > alicerce.
>> >>> >
>> >>> >
>> >>> > []'s
>> >>> >
>> >>> >
>> >>> > <code>
>> >>> > open my $fh, '<', 'filename' or die 'cannot open file';
>> >>> >
>> >>> > while ( my $line = <$fh> ) {
>> >>> >     chomp $line;
>> >>> >     my @pieces = split /\s+/, $line;
>> >>> >
>> >>> >     say '#' . ( 0 + $pieces[0] );
>> >>> >
>> >>> >     my ( @first, @second );
>> >>> >     foreach my $piece ( @pieces ) {
>> >>> >         my ( $first, $second ) = ( $piece =~ /\d{2}/g );
>> >>> >
>> >>> >         push @first, $first;
>> >>> >         push @second, $second;
>> >>> >     }
>> >>> >
>> >>> >     say join( ' ', map { 0 + $_ } @first );
>> >>> >     say join( ' ', map { 0 + $_ } @second );
>> >>> > }
>> >>> > </code>
>> >>> >
>> >>> >
>> >>> >
>> >>> > On Friday, March 30, 2012, Aureliano Guedes wrote:
>> >>> >
>> >>> > Bom dia,
>> >>> > Monges.
>> >>> >
>> >>> > Sem enrolar muito vou ser direto na minha duvida.
>> >>> >
>> >>> > Tenho dois formatos de arquivo, no qual devo converter do primeiro
>> >>> > formato
>> >>> > para o segundo,
>> >>> > e no BioPerl não encontro nada que me ajude.
>> >>> >
>> >>> > O primeiro formato, ou melhor, o formato de entrada segue o padrão
>> >>> > abaixo:
>> >>> >
>> >>> > ################################
>> >>> > Pop #Aqui indica inicio dos dados
>> >>> > 001, xywz abcd ...
>> >>> > ... #o padrão se repete ate o final
>> >>> > Gra, qwer jkld ... #o ultimo individuo se chama "Gra" sempre
>> >>> > #essas letras são numeros e no exemplo ficara mais claro
>> >>> > ################################
>> >>> >
>> >>> > O segundo formato, e no caso formato de saida segue o padrão abaixo:
>> >>> >
>> >>> > ###############################
>> >>> > #1
>> >>> > x w a c
>> >>> > y z b d
>> >>> > ...
>> >>> > #x #x é o ultimo numero, que como não sabemos qual é deixei assim
>> >>> > q e j l
>> >>> > w r k d
>> >>> > ##############################
>> >>> >
>> >>> > Agora facilitarei tudo com um exemplo
>> >>> >
>> >>> > Formato de entrada, exemplo:
>> >>> >
>> >>> > #############################
>> >>> > Pop
>> >>> > 001,    0303 0303 0101 1011 0304
>> >>> > 002,    0303 0003 0101 0410 0405
>> >>> > 003,    0303 0305 0101 1013 0304
>> >>> > 004,    0103 0304 0102 0207 0104
>> >>> > Gra,    0203 0304 0202 0207 0105
>> >>> > #############################
>> >>> >
>> >>> > Formato de saida, exemplo:
>> >>> >
>> >>> > #############################
>> >>> > #1
>> >>> > 3 3 1 10 3
>> >>> > 3 3 1 11 4
>> >>> > #2
>> >>> > 3 0 1 4 4
>> >>> > 3 3 1 10 5
>> >>> > #3
>> >>> > 3 3 1 10 3
>> >>> > 3 5 1 13 4
>> >>> > #4
>> >>> > 1 3 1 2 1
>> >>> > 3 4 2 7 4
>> >>> > #5
>> >>> > 2 3 2 2 1
>> >>> > 3 4 2 7 5
>> >>> > ##############################
>> >>> >
>> >>> > Observem duas coisas:
>> >>> >
>> >>> > - No primeiro formato os valores estão lado a lado, e de uma
>> >>> > coordenada
>> >>> > para
>> >>> > outra
>> >>> > temos um espaço, as unidades sempre são 2 numeros. No segundo
>> >>> > formato os
>> >>> > valores estão um em baixo do outro, logo se
>> >>> > temo no primeiro formato
>> >>> > #############################
>> >>> > 001,    1213 2720
>> >>> > #############################
>> >>> > vai sair
>> >>> > #############################
>> >>> > #1
>> >>> > 12 27
>> >>> > 13 20
>> >>> > #############################
>> >>> >
>> >>> > - Caso tenha um 0 na frente, o formato de saida elimina ele
>> >>> > #############################
>> >>> > 001,     0103 0202
>> >>> > [/PHP]
>> >>> > #############################
>> >>> > #1
>> >>> > 1 2
>> >>> > 3 2
>> >>> > #############################
>> >>> >
>> >>> >
>> >>> > Bem gente, toda ajuda possivel será muito bem vinda.
>> >>> >
>> >>> > Desde já, grato.
>> >>> >
>> >>> > Att,
>> >>> > Aureliano Guedes
>> >>> >
>> >>> > _______________________________________________
>> >>> > Rio-pm mailing list
>> >>> > Rio-pm em pm.org
>> >>> > http://mail.pm.org/mailman/listinfo/rio-pm
>> >>> >
>> >>> >
>> >>> > --
>> >>> > Nuba R. Princigalli nuba em pauleira.com http://pauleira.com
>> >>> > @nprincigalli
>> >>> > Discipline is not an end in itself, just a means to an end. - King
>> >>> > Crimson
>> >>> >
>> >>> > _______________________________________________
>> >>> > 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
>> > _______________________________________________
>> > Rio-pm mailing list
>> > Rio-pm em pm.org
>> > http://mail.pm.org/mailman/listinfo/rio-pm
>>
>>
>>
>> --
>> Tiago B. Peczenyj
>> Linux User #405772
>>
>> http://pacman.blog.br
>> _______________________________________________
>> 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


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