[Cascavel-pm] Melhorar a leitura de números grandes.

Eden Cardim edencardim em gmail.com
Terça Julho 3 20:04:21 PDT 2007


On 7/3/07, "Iberê O. Kuntz de Souza" <kuntzzz em gmail.com> wrote:
> > $cnumber =~ s/(\d)(?=(?:\d{3})+$)/\1./g;
> Poderia dar uma comentada? =)

hehe, esse é um daqueles casos onde pouco código fala muito. Vamos lá,
suponha que $cnumber = 1127836, vejamos o que acontece na primeira
substituição:

- (\d) casa com '1'
- (?:\d{3})+ casa com '127836' -- uma ou mais sequências de 3 dígitos,
esse agrupamento sem captura precisa estar dentro de um positive
look-ahead assertion para que a string que casar com ele não seja
considerada na hora de realizar a substituição. Além disso, o
agrupamento está ancorado no final da string ('$') para garantir que o
ponto irá ser inserido a 3 dígitos do final da string. Sem a âncora,
esse agrupamento casaria com '278' e '783'.

Enfim, um ponto é anexado ao dígito capturado e o processo todo é
repetido no resto da string ('127836') por causa do switch 'g'.
Eventualmente, ocorrerá o casamento com 7836 e o '7' é substituído por
'7.'

Espero ter sido compreensível.

Isso merece golfe em C, ou quem sabe em Perl mesmo.
-- 
Eden Cardim
Instituto Baiano de Biotecnologia
Núcleo de Biologia Computacional e Gestão de Informações Biotecnológicas
Laboratório de Bioinformática


Mais detalhes sobre a lista de discussão Cascavel-pm