[Rio-pm] Mudando de formato

Blabos de Blebe blabos em gmail.com
Sábado Março 31 06:13:07 PDT 2012


> 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


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