[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