Em 16-03-2011 12:04, Eliane Franco escreveu:
Colega,

Este texto não segue um padrão de numero de linhas no log?
O ID pelo que entendi não repete, certo?
Sim, minha idéia inicial era localizar no arquivo de Log pela linha onde existe algum tipo de erro e a partir dela (algumas linhas acima) identificar o Id do Job e a partir daí selecionar todas as linhas do Log, ou seja, por um início e pelo fim.

Meu olhar é simples, não de mestre. Então, penso que deveria identificar o ID no texto. E fazer as contas da posicao inicial e final, ja que saberia o numero de linhas... Isso funcionaria, mas não é legal, pq obriga manter um padrão do log... o correto é ter um inicio e fim identificado mesmo. Estou só aprendendo tbem.
Este é o problema, pois nem sempre segue um padrão (de ter sempre o mesmo número de linhas).

Abraços,
Eliane
Mas valeu pelo reply.
Abraço!





Em 14 de março de 2011 20:54, "Flávio R. Lopes" <[email protected] <mailto:[email protected]>> escreveu:

    Ok, obrigado Gabriel.
    Estou "juntando" as idéias aqui com base na sugestão do pessoal.

    Abraço,
    Flávio

    Em 14-03-2011 09:55, Gabriel Andrade de Santana escreveu:

        2011/3/13 Tiago Peczenyj<[email protected]
        <mailto:[email protected]>>:

            Flavio

            Imagine que vc quer imprimir todas as linhas entre uma
            string X e outra Y.
            Pode ser o começo e o fim de um StackTrace Java por
            exemplo. Vc pode ter uma
            "flag" $imprime quando encontra X e desliga quando encontra Y.
            É uma maquina de estados pois vc tem 2 estados definidos:
            "dentro" e "fora"
            do que vc quer imprimir.

        Esse tipo de comportamento, onde uma flag determina se estamos
        dentro
        ou fora de um intervalo, pode ser emulado utilizando o operador de
        intervalo (..) quem em contexto escalar[1][2] age como um
        flip-flop[3]
        armazenando o estado booleano resultante das próximas avaliações.

        Em if($linha =~ /foo/ .. $linha =~ /bar/) {} o resultado da
        operação
        será sempre verdadeiro a partir do momento em que $linha contiver
        "foo" e assim permanecerá através das sucessivas chamadas até que
        $linha contenha "bar" e então retornará falso NA PRÓXIMA
        execução do
        teste no bloco if.

        A solução do Nelson poderia ser (porcamente) reescrita assim:

        ====
        use strict;
        use warnings;

        my @buffer;
        my $has_error;

        while (<>) {
          if ( /Starting/ .. /End/ ) { # ainda estamos entre
        "Starting" e "End"?
            $has_error = 1 if !$has_error&&  m/FAIL|WARNING|ERROR/;
            push @buffer, $_;
          }
          else {
            send_email( \@buffer ), $has_error = 0 if $has_error;
            @buffer = ();
          }
        }

        ====
        $ perl script.pl <http://script.pl> arquivo.log

        Aviso: esse código tem o intuito de somente demonstrar de forma
        simplista o uso do operador supracitado e não figura como um
        todo um
        exemplo de boas práticas nem como solução definitiva para o
        problema.
        Cabendo, portanto, ao bom entendedor transformar em algo útil as
        minhas meias-palavras. :)


        [1] http://perldoc.perl.org/perlop.html#Range-Operators
        [2] http://tinyurl.com/ybfanvv
        [3] http://pt.wikipedia.org/wiki/Flip-flop
        =begin disclaimer
           Sao Paulo Perl Mongers: http://sao-paulo.pm.org/
         SaoPaulo-pm mailing list: [email protected]
        <mailto:[email protected]>
         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: [email protected]
    <mailto:[email protected]>
    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: [email protected]
  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: [email protected]
 L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
=end disclaimer

Responder a