Mar Jun 03, 2008 7:38 pm
|
 |
ragnar131
Perlero Nuevo

|
Registrado: 03 Abr 2008
Mensajes: 8
|
|
| Lectura selectiva de un fichero |
|
|
¡Hola de nuevo!
Parece que lleve una cruz con las selecciones de texto, pero tras varios intentos con el operador match de Perl, me doy cuenta de que no consigo lo que quiero (y en ocasiones no consigo nada).
Bien, resulta que tengo un servicio al que pasándole el nombre de una ciudad, obtendría sus coordenadas en latitud y longitud.
El fichero resultante tras probar con Oviedo por poner un ejemplo:
| Código: |
wget http://maps.google.com/maps?q=Oviedo -O city
my $city = `cat city`;
$city =~ m/(latlng:{lat:) ([.]+\.[.]+) (,lng:) ([.]+\.[.]+) (}) $/x;
print "$1\n"; |
Del fichero descargado, me interesa obtener el siguiente dato:
latlng:{lat:39.213479999999997,lng:-6.0950499999999996}
y más concretamente las cifras en variables separadas.
En alguna ocasión se me comentó en el foro que el uso de un HTML::Parser era algo demasiado complejo como para una selección de texto (o eso se me dio a entender) y en este caso el texto que quiero no está entre etiquetas HTML.
¿Se os ocurre alguna idea para este problema?
Gracias por vuestro tiempo y atención.
Recibid un cordial saludo. |
|
|
|

Mie Jun 04, 2008 1:57 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4018
Ubicación: Valladolid, España
|
|
|
|
|
| Perl: | #!/usr/bin/perl
use LWP:: Simple;
my $city = get ('http://maps.google.com/maps?q=Oviedo'); # Leemos la página
# 'latlng:{lat:43.360258999999999,lng:-5.8447579999999997}' # Ejemplo de lo obtenido
$city =~ m/latlng:\ {lat: ([\d.- ]+ ) ,lng: ([\d.- ]+ ) \ }/simox; # Extracción
print "$1 $2\n"; |
El \d equivale a 0-9. Así que [\d.-] captura dígitos con puntos y un posible '-' delante.
Lo que tenías ([.]+), solo capturaba eso... puntos. Fíjate que además solo se usan paréntesis de captura en donde realmente queremos capturar. |
|

Jue Jun 05, 2008 3:16 am
|
 |
ragnar131
Perlero Nuevo

|
Registrado: 03 Abr 2008
Mensajes: 8
|
|
|
|
|
Antes de nada, gracias por la respuesta.
Mi intención al usar [.] en la expresión regular, era la equivalencia de "cualquier cosa menos \n" o salgo de fin de línea. Pensaba que para buscar caracteres punto, el carácter punto había que protegerlo de la siguiente manera: [\.].
Al final, lo he solucionado de una manera mucho menos elegante.
Pondré la solución por si en algún momento pueda servirle a alguien, pero algo más tarde que ahora no me da tiempo.
Procuraré probar la solución que me propones y a ver que tal me funciona.
¡Gracias por todo! |
|
Powered by phpBB © 2001, 2005 phpBB Group
|