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

Renato Santos renato.cron at gmail.com
Thu May 2 13:22:54 PDT 2013


(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>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20130502/78dbcf65/attachment-0001.html>


More information about the SaoPaulo-pm mailing list