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

Gustavo Telly gustavo.telly at gmail.com
Sun Jun 26 18:16:32 PDT 2011


Então na verdade, nem é um while... seria o if mesmo :P

com o while ele faria todo o processo de novo para cada nova linha depois da
ocorrencia...

colocaria da 50 ateh o final, depois da 51 até o final, até o final,
hehehehe

só se rolasse dar um last no while interno e no do leitor (<..>), mas ai
ficaria muito viajado na maionese.. rsrs

[]'s

2011/6/26 Renato Santos <renato.cron em gmail.com>

> 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 em 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 em 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 em 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 em 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 em 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 em 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 em 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 em 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 em 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 em 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 em 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 em 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 em 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 em pm.org
>  L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
> =end disclaimer
>
>
-------------- Pr?xima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20110626/6300eca3/attachment.html>


More information about the SaoPaulo-pm mailing list