• Publicidad

Extraer datos

¿Ya sabes lo que es una referencia? Has progresado, el nível básico es cosa del pasado y ahora estás listo para el siguiente nivel.

Extraer datos

Notapor piero66 » 2013-11-14 12:17 @553

Buen día.

Se me presentó un detalle, me piden que obtenga y pueda descomponer la información de un campo (de una base de datos).

El campo se llama: dirección y los registros se presentan como sigue:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
direccion
1.-BLVD J JOSE TORRES LANDA 4332                                  
2.-TORRE BLANCA S/N                        
3.-PARQUE NACIONAL LA VENTA 221                      
4.-BLVD F G BOCANEGRA 101 LOC 6,7          
5.-LOMA DEL POTRERO 109 Y 111              
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

Y los tendría que descomponer en dos diferentes datos.

calle y número, debiera quedar como sigue.

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
calle                         num
1.-LOMA DEL POTRERO            109 Y 111
2.-TORRE BLANCA               S/N
3.-PARQUE NACIONAL LA VENTA    221                                      
4.-BLVD F G BOCANEGRA          101 LOC 6,7          
5.-LOMA DEL POTRERO            109 Y 111    
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Cómo ven la información viene muy variada, por tal motivo no sé cómo poder descomponer en calle y número como datos distintos. ¿Alguna idea, compañeros?

¡¡ Agradecería sus comentarios !!
piero66
Perlero nuevo
Perlero nuevo
 
Mensajes: 95
Registrado: 2008-05-22 12:00 @541

Publicidad

Re: Extraer datos

Notapor explorer » 2013-11-14 15:24 @683

Aunque sea información variada, sigue algunas reglas, así que podemos usar patrones para localizar lo que queremos.

Con este programa:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use diagnostics;
  5.  
  6. my $no_numero   = qr{S/N};
  7. my $numero      = qr/\d+/;
  8. my $local       = qr/LOC [ ] $numero (?: , \s* $numero)*                        /x;
  9. my $portal      = qr/$numero (?: [ ] $local)?                                   /x;
  10. my $portales    = qr/$portal (?: , \s* $portal)* (?: \s+ Y \s+ $portal)?        /x;
  11.  
  12. my $fmt = "%-30s%s\n";
  13.  
  14. printf $fmt, "calle", "num";
  15.  
  16. while (my $linea = <DATA>) {            # leemos las líneas de la sección DATA (más abajo)
  17.     chomp $linea;
  18.  
  19.     $linea =~ s/\s+$//;                 # quitar los espacios en blanco del final
  20.  
  21.     my($calle,$numero) =
  22.         $linea =~ m/
  23.             ^                           # inicio de línea
  24.             (.+?)                       # primera parte: calle
  25.             \s+                         # separador
  26.             ( $no_numero | $portales )  # segunda parte: número
  27.             $                           # fin de línea
  28.             /x
  29.         ;
  30.  
  31.     printf $fmt, $calle, $numero;
  32. }
  33.  
  34. __DATA__
  35. 1.-BLVD J JOSE TORRES LANDA 4332                                  
  36. 2.-TORRE BLANCA S/N                        
  37. 3.-PARQUE NACIONAL LA VENTA 221                      
  38. 4.-BLVD F G BOCANEGRA 101 LOC 6,7          
  39. 5.-LOMA DEL POTRERO 109 Y 111
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
sale
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
calle                         num
1.-BLVD J JOSE TORRES LANDA   4332
2.-TORRE BLANCA               S/N
3.-PARQUE NACIONAL LA VENTA   221
4.-BLVD F G BOCANEGRA         101 LOC 6,7
5.-LOMA DEL POTRERO           109 Y 111
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Extraer datos

Notapor piero66 » 2013-11-15 18:07 @797

¡Oralee! Muchas gracias, calaré el ejemplo y comento cómo me fue, ¡¡ gracias, explorer !!
piero66
Perlero nuevo
Perlero nuevo
 
Mensajes: 95
Registrado: 2008-05-22 12:00 @541


Volver a Intermedio

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados