[SP-pm] Selecionar texto após uma determinada linha em um arquivo

Renato Santos renato.cron at gmail.com
Sun Jun 26 18:05:14 PDT 2011


Hmm
Abrindo um segundo loop dentro do loop [tericamente] gastaria mais processo
que analisar se a linha atual bate ou não [e ainda pode ser verificado
antes...]
mas,
se o intuito for performance, e o texto não for grande [menos de 1mb]
podemos fazer um slurp e jogar tudo numa msema linha e bater uma simples
expressão:


$arquivointeiro = do { local ( @ARGV, $/ ) = $file; <> };
$procura = qr 'o que vc ta procurando';

my ($ateofinal) = $arquivointeiro =~  /($procura.+)/;


2011/6/26 Gustavo Telly <gustavo.telly at gmail.com>

> acredito que a primeira solução do Renato me parece ser exatamente oque
> você precisa Flávio,
> Se voce quise fazer pelo número da linha, acho que vai ficar mais
> complicado, por que você vai ter que colocar mais coisas no seu
> algoritmo(segundo exemplo do Renato).
>
> E por cima mesmo, os 2 realizam a mesma coisa, de jeito diferente, mas acho
> que pra sua necessidade os primeiro é mais tranquilo :)
>
> Você pode deixa-lo assim:
>
> $encontrou = 0;
> $texto = '';
> open(.., '<', ..);
> while( <..>) {
>    ???
>     if ($_ =~ /algumaregexpr/ ) {
>         $encontrou = 1;
>     }
>    while ($encontrou && !eof()){ #só mudar aqui para ele ir concatenando o
> valor até o fim do arquivo.
>       $text .= $_;
>    }
> }
>
> $textoAteoFinal = $texto;
>
>
> 2011/6/26 Renato Santos <renato.cron at gmail.com>
>
>> Toda a lógica para abrir o arquivo com perl está aqui:
>>
>> http://sao-paulo.pm.org/artigo/2010/analisedastecnicasparaabrirelerarquivos
>>
>> Toda lógica para fazer o que você quer está aqui:
>>
>> vars
>>    a: texto
>>    b: numero
>>
>> a esta vazio
>> b é indefinido
>>
>> abrir arquivo
>> enquanto (ler(arquvio)) repita
>>
>>    se (linha-atual tem a ocorrencia) entao
>>       b têm o valor da linha atual
>>    fim-se
>>
>>    se (b estiver definido) entao
>>       a = a + linha
>>    fim-se
>> fim-enquanto
>>
>> todo o valor de "a" neste ponto será o texto entre texto encontrado até
>> final do arquivo.
>>
>>
>> 2011/6/26 "Flávio R. Lopes" <flavio.lopes at links.inf.br>
>>
>>> **
>>> Putz, desculpe! Escrevi errado!
>>> Supondo que a o número da linha onde há a ocorrência seja a linha 100,
>>> como poderia fazer então para copiar da linha 100 até o final do arquivo?
>>>
>>>
>>> On 26-06-2011 21:28, Gustavo Telly wrote:
>>>
>>> pq da linha 50 se a ocorrência está na 100 ???
>>>
>>>  não entendi muito bem....
>>>
>>>  []'s
>>>
>>> 2011/6/26 "Flávio R. Lopes" <flavio.lopes at links.inf.br>
>>>
>>>>  Deixar eu explicar melhor.
>>>> Supondo que o número da linha onde há a ocorrência da palavra seja a
>>>> linha número 100. Como eu faria para copiar/selecionar da linha 50 até o
>>>> final do arquivo?
>>>>
>>>>
>>>> On 26-06-2011 21:19, "Flávio R. Lopes" wrote:
>>>>
>>>> Olá Renato!
>>>> Então, estive pensando também na seguinte hipótese: Eu tenho como obter
>>>> o número da linha onde está a primera ocorrência do valor. Então à partir
>>>> disto, eu copiaria desta linha até o final do arquivo.
>>>> Dá para fazer isto?
>>>>
>>>> On 26-06-2011 20:56, Renato Santos wrote:
>>>>
>>>> vc pode criar uma variavel que tera o valor falso antes do loop do
>>>> arquivo, e mais uma vazia, e quando encontar o texto que está procurando,
>>>> jogue o troque o valor da variavel para outro, e depois verifique se o valor
>>>> é o .. ah, que saber:
>>>>
>>>>  $encontrou = 0;
>>>> $texto = '';
>>>> open(.., '<', ..);
>>>> while( <..>) {
>>>>    ???
>>>>     if ($_ =~ /algumaregexpr/ ) {
>>>>         $encontrou = 1;
>>>>     }
>>>>     if ($encontrou){
>>>>       $text .= $_;
>>>>    }
>>>> }
>>>>
>>>>  $textoAteoFinal = $texto;
>>>>
>>>>
>>>> Têm muitas formas, mas está é a mais clara.
>>>>
>>>>  2011/6/26 "Flávio R. Lopes" <flavio.lopes at links.inf.br>
>>>>
>>>>> Olá pessoal!
>>>>> Há alguns dias venho brigando com um  script, onde gostaria que este
>>>>> script me ajudasse a selecionar algumas linhas de um arquivo de texto.
>>>>> Preciso selecionar, à partir da ocorrência de uma determinada string,
>>>>> todo o texto até o final do arquivo.
>>>>>
>>>>> Supondo que eu tenha uma linha que inicie com "26-06-2011", como
>>>>> poderia fazer a regex para copiar todo o texto desta linha até o final do
>>>>> arquivo, inclusive esta linha?
>>>>>
>>>>> abraço,
>>>>> Flávio
>>>>>
>>>>>
>>>>> =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
>>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> Renato Santos
>>>> http://www.renatocron.com/blog/
>>>>
>>>>
>>>> =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> <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> <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
>>>>
>>>>
>>>
>>> =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> <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
>>>
>>>
>>
>>
>> --
>> Renato Santos
>> http://www.renatocron.com/blog/
>>
>> =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
>
>


-- 
Renato Santos
http://www.renatocron.com/blog/
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20110626/f3884142/attachment-0001.html>


More information about the SaoPaulo-pm mailing list