[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