[Cascavel-pm] Separando campos
Luis Motta Campos
luismottacampos em yahoo.co.uk
Segunda Março 19 08:57:57 PDT 2007
On Mar 19, 2007, at 4:03 PM, Gabriel Vieira wrote:
> Correção: no 2o o nome da rua aparece apenas "29 Junho".
> On 3/19/07, Gabriel Vieira <gabriel.vieira em gmail.com> wrote:
> $endereco = "R MARGARIDAS 13 QD8 C 13";
> $endereco = "AV 29 JUNHO 00602";
> print "Tipo: $1\nRua: $2\nNúmero: $4\nComplemento: $6" if $endereco
> =~ /^(\w+)\s+((\s|\w)+?)\s+(\d+)(\s+((\s|\w)+))?$/;
>
> # Tipo: R
> # Rua: MARGARIDAS
> # Número: 13
> # Complemento: QD8 C 13
>
> # e
>
> # Tipo: AV
> # Rua: AV 29 JUNHO
> # Número: 00602
> # Complemento:
Minhanossasenhoraaparecida!
Assim, a gente perpetua ainda mais a fama ruim da linguagem...
Espera. Faz assim:
#!/usr/bin/perl
use strict;
use warnings;
my $expressao_regular =
qr{^ # um início de linha
(\w+) # seguido de uma palavra: o TIPO DE LOGRADOURO
\s+ # seguido de um ou mais espaços
(
(\s|\w)+ # seguido de uma ou mais palavras ou espaços: o NOME
DO LOGRADOURO
?) # mas não seja guloso: consuma o mínimo que conseguir.
\s+ # seguido de um ou mais espaços
(\d+) # seguido de um ou mais dígitos: o NÚMERO
(
\s+ # seguido de um ou mais espaços
(
(\s|\w)+ # seguido de palavras ou espaços: o COMPLEMENTO
)
)? # opcionalmente.
$
}x;
# Agora, continuamos com a nossa "programação normal":
print "Tipo: $1\nRua: $2\nNúmero: $4\nComplemento: $6"
if $expressao_regular =~ $endereco;
__END__
Agora, sim, isso parece racionalmente possível de ler e manter!
Muito cuidado, galera!
Os iniciantes não sabem fazer isso, é melhor prevenir que remediar.
Verônica, se você tiver problemas, pergunta, que a gente sempre
responde. Sempre. ;-)
Putamplexos!
--
Luis Motta Campos (a.k.a. Monsieur Champs) is a software engineer,
Perl fanatic evangelist, and amateur {cook, photographer}
Mais detalhes sobre a lista de discussão Cascavel-pm