Fala Frederico,<div><br></div><div>Vamos lá. Na própria thread o Eden da ótimos exemplos, vou reproduzi-los aqui e tentar explicar.</div><div><br></div><div>O primeiro que usei foi esse aqui:</div><div><br></div><div><code></div>
<div><div>$exp->send(cmd1$); ##To enviando o comando</div><div><br></div><div>$exp->expect(100, [qr/.{1920}/ => sub {</div><div>                                          my($self) = @_;</div><div>                                          print $self->match; </div>
<div>                                      }</div><div>                  ]</div><div>            );</div><div><code></div><div><br></div><div>Como você mesmo disse, a tela tem 80x24, ou sejam 1920 caracteres, o que inclui espaços.</div>
<div>$exp->expect( ##Lê o retorno</div><div>O primeiro parâmetro é o timeout</div><div>O segundo é uma regex, que nesse caso espera 1920 caracteres. Se receber isso, vai executar a sub e a sua "tela" vai estar na variável $self. Ai você tem que garimpar os dados nessa "stringona", tipo, copiar pedaços dela que contenham os dados que você quer.</div>
<div><br></div><div><br></div><div>Bom, depois passei para outro mais refinado:</div><div><br></div><div><code></div><div><div> $exp->send($cmd1); </div><div> $exp->expect(100, [</div><div>                    qr/resposta cmd1: (.+)/ => sub {</div>
<div>                                                       my $self = shift;</div><div><br></div><div>                                                       # $resposta vai ter o que casou com (.+) - Aqui você coloca algo que você esteja esperando</div>
<div>                                                       # Digamos que a informação que você querer seja precedida de <Nome:>, então é isso que você está esperando</div><div>                                                       my($resposta) = $self->match_list;</div>
<div><br></div><div>                                                       # Aqui você guarda a informação no banco de dados ou qualquer outro processamento</div><div><br></div><div>                                                       # enviar segundo comando, para pegar outra informação, p.e.</div>
<div>                                                       $self->send($cmd2);</div><div><br></div><div>                                                       exp_continue; # manda continuar</div><div>                                                   },</div>
<div>                    qr/resposta cmd2: (.+)/ => sub {</div><div>                                                       my $self = shift;</div><div>                                                       my($resposta) = $self->match_list;</div>
<div><br></div><div>                                                       # etc...</div><div><br></div><div>                                                       exp_continue;</div><div>                                                   },</div>
<div><br></div><div>                    # quantas expressões você quiser/precisar</div><div><br></div><div>                    timeout => sub { die 'o sistema parou de responder' }</div><div>                   ]</div>
<div>             );</div></div><div><code></div><div><br></div><div>Nesse caso ai você vai esperar por expressões especificas, e cada vez que elas coincidirem o código da sub será processado. Eu pelo menos acabei achando mais fácil assim do que pegar uma "stringona" e ficar procurando dados dentro dela.</div>
<div><br></div><div>Pra cada vez que você enviar ($exp->send()) você precisa processar o retorno ($exp->expect()).</div><div>O retorno é sempre uma string ou timeout. Você só tem que escolher como quer processar essa string.</div>
<div><br></div><div>Se tiver mais dúvidas vai postando que vamos tentando ajudar.</div><div><br></div><div>[...]´s</div><div><br></div><div>Marcio</div><br><div class="gmail_quote">Em 25 de março de 2013 16:13, Frederico Melo <span dir="ltr"><<a href="mailto:fdmmelo@gmail.com" target="_blank">fdmmelo@gmail.com</a>></span> escreveu:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Oi Márcio, tudo bem?<br><br>Voltei! Então... após várias tentativas, debugs e verificação de logs, consegui navegar pelo servidor IBM através do Perl com Expect. Muito legal mesmo! Obrigado pelas dicas iniciais! Agora, cheguei na fase de capturar algumas informações e gravá-las em banco de dados.<br>

<br>Vejo nos arquivos de logs o resultado da função ascii do s3270. Como faço para pegar alguns dados (não é o print da tela 0,0,24,80 completo) e armazeno em banco? Pelo Perl e Expect isso é possível de ser feito no mesmo tempo que navega-se pelas telas do MainFrame IBM?<br>

<br>Hoje meu código é algo assim:<br><br><br><span style="font-family:courier new,monospace">#!/usr/bin/perl<br><br>my @s3270 = s3270;<br><br>use strict;<br>use warnings;<br>use Expect;<div class="im"><br><br>my $exp = Expect->spawn('s3270');<br>

<br></div>$exp->log_file('teste.log');<br><br>my $cmd1 = "connect(<a href="http://12.234.123.3:23" target="_blank">12.234.123.3:23</a>)\n";<br>$cmd1 .= "wait(InputField)\n";<br>$cmd1 .= "String(username)\n";<br>

$cmd1 .= "Enter()\n";<br>$cmd1 .= "wait(InputField)\n";<br>$cmd1 .= "String(password)\n";<br>$cmd1 .= "Enter()\n";<br>$cmd1 .= "wait(InputField)\n";<br>$cmd1 .= "String(APL)\n";<br>

$cmd1 .= "Enter()\n";<br>$cmd1 .= "wait(InputField)\n";<br>$cmd1 .= "String(CODAPL)\n";<br>$cmd1 .= "Enter()\n";<br>$cmd1 .= "pf(3)\n"; #TELA INCIAL APL -> VAI PARA CONSULTAS<br>

$cmd1 .= "wait(InputField)\n";<br>$cmd1 .= "String(14)\n";<br>$cmd1 .= "Enter()\n";<br>$cmd1 .= "wait(InputField)\n";<br>$cmd1 .= "String(01)\n";<br>$cmd1 .= "Enter()\n";<br>

$cmd1 .= "String(ordemserv12tt)\n";<br>$cmd1 .= "Enter()\n";<br>$cmd1 .= "Ascii(0,0,24,80)\n";<br></span><br>Neste ponto, tenho a tela impressa em memória e no log. Como faço, nessa etapa, para capturar alguns dados e armazená-los em banco? Não tenho dificuldades em utilizar DBD ou DBI no perl, minha dificuldade é interagir o perl com os retornos do s3270 e expect. Seria possível me auxiliar? Já agradeço pelo precioso apoio1<br>

<br>Obrigado novamente!<span class="HOEnZb"><font color="#888888"><br>Frederico<br><br><br></font></span><div class="gmail_quote"><div><div class="h5">2013/3/21 Marcio - Google <span dir="ltr"><<a href="mailto:marciorp@gmail.com" target="_blank">marciorp@gmail.com</a>></span><br>
</div></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div class="h5">
<p>Tiago, nesse caso não. A função "string" é do s3270, e ele entende tudo de forma literal. Também tropecei nisso.</p>
<p>Frederico, isso. Se não me engano, para "entrar" o comando é ENTER.<br>
Se não funcionar posta novamente que vou ver com fiz.</p>
<br></div></div><div class="im">=begin disclaimer<br>
   Sao Paulo Perl Mongers: <a href="http://sao-paulo.pm.org/" target="_blank">http://sao-paulo.pm.org/</a><br>
 SaoPaulo-pm mailing list: <a href="mailto:SaoPaulo-pm@pm.org" target="_blank">SaoPaulo-pm@pm.org</a><br>
 L<<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a>><br>
=end disclaimer<br>
<br></div></blockquote></div><br>
<br>=begin disclaimer<br>
   Sao Paulo Perl Mongers: <a href="http://sao-paulo.pm.org/" target="_blank">http://sao-paulo.pm.org/</a><br>
 SaoPaulo-pm mailing list: <a href="mailto:SaoPaulo-pm@pm.org">SaoPaulo-pm@pm.org</a><br>
 L<<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a>><br>
=end disclaimer<br>
<br></blockquote></div><br><br></div>