[SP-pm] Automatizando consulta IBM com Perl ou Expect

Hernan Lopes hernanlopes at gmail.com
Thu May 2 17:28:44 PDT 2013


E depois manda o codigo final pra ter como referencia da solucao aqui nesta
enxurrada de emails...

Pois derepente la na frente alguem tem o mesmo problema, e vai ler todos
estes emails e não vai chegar na solućão.

Então poste essa solućão tb por favor.


2013/5/2 Renato Santos <renato.cron at gmail.com>

> (totalmente por fora, nunca usei esses modulos/cheguei perto desse tipo de
> interação)
>
> but..
>
> pelo que entendi, seu primeiro "expect" já captura várias informações, e
> ai você quer continuar fazendo "expects" com a entrada dela, por exemplo:
>
>
> COMECO
> [NOME:CRON]
> [ANO:1992]
> FIM
>
> vc usaria o expect algo como qr/COMECO(.1)FIM/ e ai o modulo se vira pra
> ler de pouco até chegar o dado 'FIM', quando faz isso, toda a string desde
> o "COMECO" até "FIM" já está na memoria (nao sei exatamente se é no $1, mas
> vc já deve saber como usar) e ai assim,
>
> isso é apenas string, vc pode até usar o expect passando o $stringref, mas
> nao sei se é realmente necessário, já que você pode simplesmente usar algo
> como
>
> while ($str =~ /\[(.+)\:(.+)\]/g){
>     my ($chave,$valor) = ($1, $2);
>     print "$chave = $valor\n";
> }
>
>
>
> 2013/5/2 Frederico Melo <fdmmelo at gmail.com>
>
>> Eden! Obrigado! Funcionou! Muito obrigado mesmo!
>>
>> Sem querer abusar, gostaria de entender melhor como crio os blocos de
>> processamento dentro do expect. Por exemplo:
>>
>>
>> #$exp->expect(5, [qr/.{1920}/ => sub {
>> #                                         my($self) = @_;
>> #                                         print $self->match;
>> #
>> #                                         exp_continue;
>> #                                      },
>> #                   timeout => sub { die 'o sistema parou de responder' }
>> #                  ]
>> #            );
>>
>> Entendo que no bloco acima, limitado pelo primeiro "(" e o último ")"
>> executo o print que corresponde ao retorno da REGEX. OK! É possível, dentro
>> do mesmo bloco do expect, criar vários blocos limitados por "[" e "]" e
>> processar várias REGEXs? Como faço isso? Seria algo como feito abaixo?
>>
>>
>> #$exp->expect(5, [qr/.{1920}/ => sub {
>> #                                         my($self) = @_;
>> #                                         print $self->match;
>> #
>> #                                         exp_continue;
>> #                                      },
>> #                   timeout => sub { die 'o sistema parou de responder' }
>> #                  ],
>> #
>> #                  [qr/DATA\s+.:(.+)/ => sub {
>> #                                         my($self1) = shift;
>> #                                         print $self1->match;
>> #
>> #                                         exp_continue;
>> #                                      },
>> #                   timeout => sub { die 'o sistema parou de responder' }
>> #                  ]
>> #            );
>>
>>
>> Fiz isso no código e não há print do $self1, como se o código nem
>> entrasse no segundo bloco de REGEX. Se coloco o segundo bloco de REGEX no
>> lugar do primeiro, o print funciona. O que está errado?
>>
>>
>> Procurei na documentação do Expect e vi que existe uma chamada para
>> CallBacks. Tipo:
>>
>>   $exp->expect($timeout,
>>                [ qr/regex1/ => sub { my $exp = shift;
>>                                      $exp->send("response\n");
>>                                      exp_continue; } ],
>>                [ "regexp2" , \&callback, @cbparms ],
>>               );
>>
>>
>> Não soube como utilizar isso. Seria possível ajudar?
>>
>>
>> Obrigado novamente e desculpe a trabalheira.
>>
>>
>> Frederico
>>
>> 2013/4/29 Eden Cardim <eden at insoli.de>
>>
>>>
>>> Experimenta trocar as regex mencionadas abaixo pelas sugestões que
>>> seguem:
>>>
>>>     Frederico> data: SIGLA.........: XYZ NUMERO DO COD.: 0DD
>>>     Frederico> qr/data:\s+(.+)NUMERO\s+(.+)/
>>>
>>> qr/NUMERO DO COD\.*?:\s*?(\S+)/;
>>>
>>>     Frederico> data: LOCALIDADE....: XISYPSZE
>>>     Frederico> qr/data:\s+LOCALIDADE(.+)/
>>>
>>> qr/LOCALIDADE\.*?:\s*?(\S+)/;
>>>
>>> --
>>> Eden Cardim -- Insolide Soluções de TI Ltda.
>>> +55 11 9644 8225
>>> http://insoli.de
>>> =begin disclaimer
>>>    Sao Paulo Perl Mongers: http://sao-paulo.pm.org/
>>>  SaoPaulo-pm mailing list: SaoPaulo-pm at pm.org
>>>  L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
>>> =end disclaimer
>>>
>>
>>
>> =begin disclaimer
>>    Sao Paulo Perl Mongers: http://sao-paulo.pm.org/
>>  SaoPaulo-pm mailing list: SaoPaulo-pm at pm.org
>>  L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
>> =end disclaimer
>>
>>
>
>
> --
> Saravá,
> Renato CRON
> http://www.renatocron.com/blog/
> @renato_cron <http://twitter.com/#!/renato_cron>
>
> =begin disclaimer
>    Sao Paulo Perl Mongers: http://sao-paulo.pm.org/
>  SaoPaulo-pm mailing list: SaoPaulo-pm at pm.org
>  L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
> =end disclaimer
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20130502/ff6d5a64/attachment.html>


More information about the SaoPaulo-pm mailing list