[Cascavel-pm] Parse de Endereço (Was: Re: Separando campos)
Gabriel Vieira
gabriel.vieira em gmail.com
Terça Março 20 09:00:24 PDT 2007
A idéia é muito interessante, creio que valeria para endereços que não
fossem do Brasil também (com ajustes, claro).
A dificuldade será em estabelecer o padrão de preenchimento do endereço para
um parse bem adequado.
Gostei da idéia.
On 3/20/07, Daniel Ruoso <daniel em ruoso.com> wrote:
>
> Seg, 2007-03-19 às 11:39 -0300, Veronica Soraia escreveu:
> > olá tenho um problema , não estou conseguindo resolver (sou iniciante
> > rsrsr), é o seguinte, tenho um arquivo q vem com o endereço junto com
> > essas duas opções : AV 29 JUNHO 00602, e , R MARGARIDAS 13 QD8 C 13.
>
> Vendo esse problema, me lembrei de uma migração que tive que fazer uma
> vez de um banco de dados lazarento em access para um banco de dados
> PostgreSql. Uma das diferenças dos bancos de dados era que o endereço no
> banco novo era completamente estruturado (conforme utilizado pelos
> correios) em Tipo de Logradouro, Logradouro, Número e Complemento,
> enquanto no banco de dados anterior foi preenchido completamente à mão
> por um conjunto indefinido de pessoas.
>
> O parse não foi perfeito, mas os casos que consegui localizar enquanto
> estava escrevendo o script foram atendidos... De repente valia a pena
> fazer um módulo Brasil::Parse::Endereco :)... e fazer test cases...
>
> bem... aí vai o código que eu fiz na altura:
>
> <code>
> sub extrair_endereco {
> my $endereco = shift;
> my $original = $endereco;
> my ($t,$l,$n,$c) = ('','','','');
>
> if ($endereco =~ /^rua\,*\s*(.+)$/i) {
> $t = "Rua";
> $endereco = $1;
> } elsif ($endereco =~ /^av\.*\,*\s*(.+)$/i) {
> $t = "Avenida";
> $endereco = $1;
> } elsif ($endereco =~ /^trav\.*\,*\s*(.+)$/i) {
> $t = "Travessa";
> $endereco = $1;
> }
>
> if ($endereco =~ /^([^,]+)\s*,\s*(.+)$/i) {
> $l = $1;
> $endereco = $2;
> } elsif ($endereco =~ /^(.+)\s*N\.*º\s*(.+)$/i) {
> $l = $1;
> $endereco = $2;
> } elsif ($endereco =~ /^(.\D+)\s+(\d+?.+)$/i) {
> $l = $1;
> $endereco = $2;
> }
>
> if ($endereco =~ /^(\S+)\s+(.+)$/) {
> $n = $1;
> $c = $2;
> } else {
> $n = $endereco;
> $c = '';
> }
>
> return ($t,$l,$n,$c);
> }
> </code>
>
> Alguém acha a idéia interessante?
>
> daniel
>
> _______________________________________________
> Cascavel-pm mailing list
> Cascavel-pm em pm.org
> http://mail.pm.org/mailman/listinfo/cascavel-pm
>
--
Gabriel Vieira
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: http://mail.pm.org/pipermail/cascavel-pm/attachments/20070320/3d384d93/attachment.html
Mais detalhes sobre a lista de discussão Cascavel-pm