[SP-pm] Remover 0x0D (aka carriage return) do final de uma linha

Renato Santos renato.cron at gmail.com
Fri Jul 23 18:31:39 PDT 2010


Uma vez tinha uma rotina de trim aqui na empresa,
pra fazer trim de strings enormes (aka length = 16000+)
que fazendo
$string =~ s/(^\s+)(\s+$)//g;
demorava 1 segundo mais ou menos,
e
$string =~ s/^\s+//;
$string =~ s/\s+$//;
demorou menos de 0.2 pra limpar 1000 linhas.

Bom, isso foi num pentil III.

Eu tambem uso linux,
nunca tive problema com \r\n, pois sempre uso o trim (exceto no dia que
descobri que ele era estava lento, mas como estava sem tempo naquele exato
momento fiz o exemplo abaixo:)
$line = <>;

chomp($line);
chomp($line) if (substr($line, 1, -1) eq "\r");

Nao sei se eh mais rapido que as 2 expressoes regulares, pois nao testei,
mas é MUITO mais rapido que a regular expression com global.


2010/7/23 Luis Motta Campos <luismottacampos at yahoo.co.uk>

> On 07/22/2010 04:11 PM, Otavio Pereira wrote:
> > Aproveitando o e-mail porquê
> >
> >     $x =~ s/0x0d//g;
> >
> > não funciona?
> >
> > Alguma sugestão?
>
> Sugiro que você RTFM(*) "perlre", onde se explica como usar notação
> hexadecimal em expressões regulares.
>
> A minha implementação da sua expressão seria mais como
>
> s{\x0D}{}g
>
> Ou a ainda mais legível
>
> s{\r}{}g
>
> O que você está fazendo de errado é negando que você tem um problema de
> arquitetura nos seus programas: você lê e processa arquivos com duas
> codificações diferentes (linhas terminadas com "\r\n" ou "\n" -- padrão
> "Windows" ou "unix"), mas não faz nada explícito para detectar o padrão
> e se comportar de acordo no seu programa. Você poderia começar assumindo
> que todas as linhas que você ler de um mesmo arquivo vão estar no mesmo
> formato, e partir daí.
>
> Eu recomendo construir um Iterador flexível o bastante para repetir o
> padrão para todas as linhas do arquivo, baseado em Iterator::IO::ifile,
> e transformar isso numa biblioteca que você pode até subir para o CPAN.
>
> Putamplexos
> --
> Luis Motta Campos is a DBA,
> Perl Programmer, foodie and photographer.
>
> (*) Querendo dizer "Read The FRIENDLY Manuals"
> _______________________________________________
> SaoPaulo-pm mailing list
> SaoPaulo-pm at pm.org
> http://mail.pm.org/mailman/listinfo/saopaulo-pm
>



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


More information about the SaoPaulo-pm mailing list