• Publicidad

Lectura selectiva de un fichero

Aquí encontrarás todo lo que sea específicamente acerca de módulos de Perl. Ya sea que estás compartiendo tu módulo, un manual o simplemente tienes una duda acerca de alguno.

Lectura selectiva de un fichero

Notapor ragnar131 » 2008-06-03 20:38 @901

¡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: Seleccionar todo
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.
ragnar131
Perlero nuevo
Perlero nuevo
 
Mensajes: 8
Registrado: 2008-04-03 13:23 @599

Publicidad

Notapor explorer » 2008-06-04 14:57 @664

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/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";
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


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.
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

Notapor ragnar131 » 2008-06-05 04:16 @219

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!
ragnar131
Perlero nuevo
Perlero nuevo
 
Mensajes: 8
Registrado: 2008-04-03 13:23 @599


Volver a Módulos

¿Quién está conectado?

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