[SP-pm] Ajuda com Regex
Wagner Klein
wagner.klein at gmail.com
Fri Mar 25 17:27:13 PDT 2011
Flavio,
Nesse tipo de processamento eu normalmente faço uma "maquina de
estados". A forma varia dependendo do que de deseja.
Para o exemplo, uma forma seria:
$stat = 0;
$str = "";
LINE:
while(<>) {
$stat == 0 && /^\d+-\S+ id \d+: Start/ && do {
&processa if $stat;
$stat = 1;
$str = $_;
next LINE;
};
next if not $stat;
$str .= $_;
$stat == 1 && /^\d+-\S+ id \d+: End/ && do {
&processa;
$stat = 0;
$str = "";
next LINE;
};
}
&processa if $stat;
sub processa {
# processa $str que contem o bloco de dados isolados
}
Normalmente não uso o a forma de "coleta e processamento" como acima,
apenas uso a variavel $stat para ir alterando o conhecimento da
informação que estou tratando, por exemplo, se para voce o que deseja
é encontrar o "Termination: OK":
....
$stat == 1 && /\s*Termination: OK/ && do {
# alguma coisa
next LINE;
};
$stat == 1 && /\s*Termination: / && do {
# outra coisa (considerando que $' contem a mensagem de erro
se for o caso)
next LINE;
};
2011/3/16 "Flávio R. Lopes" <flavio.lopes em links.inf.br>:
> Boa noite pessoal.
> Postei mais ou menos isto num e-mail anterior, mas não consegui resolver
> ainda.
>
> Como posso fazer para delimitar quais a linhas a serem armazenadas num
> array, supondo o seguinte exemplo:
>
> 12-Mar Id 103: Start ...
> 12-Mar Id 103: BlahBlahBlah...
> Id: 103
> Termination: OK
> 12-Mar Id 103: BlahBlahBlah...
> 12-Mar Id 103: End...
>
> 13-Mar Id 104: Start ...
> 13-Mar Id 104: BlahBlahBlah...
> Id: 104
> Termination: OK
> 13-Mar Id 104: BlahBlahBlah...
> 13-Mar Id 104: End...
>
> Supondo que eu queira somente as linhas do processo do dia 12-mar, qual
> regex eu poderia usar para DELIMITAR que as linhas que quero são todas as
> compreendidas entre:
> 12-Mar Id 103: Start ...
> e
> 12-Mar Id 103: End...
>
> Observem que existem duas linhas que não tem como padrão a data no início
> dela.
> É possível fazer tipo de uma "marca" nas linhas que quero pegar e "falar"
> para o Perl: Perl, por favor coloque no meu array da linha-x à linha-y ???
> :)
>
> abraço,
> Flávio
More information about the SaoPaulo-pm
mailing list