Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 

Lectura selectiva de un fichero

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Módulos
Mensaje Mar Jun 03, 2008 7:38 pm
ragnar131
Perlero Nuevo
Perlero Nuevo
Registrado: 03 Abr 2008
Mensajes: 8
Lectura selectiva de un fichero Responder citando

¡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.
Mensaje Mie Jun 04, 2008 1:57 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4130
Ubicación: Valladolid, España
Responder citando

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.
Mensaje Jue Jun 05, 2008 3:16 am
ragnar131
Perlero Nuevo
Perlero Nuevo
Registrado: 03 Abr 2008
Mensajes: 8
Responder citando

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!
Publicar nuevo tema   Responder al tema    Foros de discusión -> Módulos Todas las horas son GMT - 6 Horas
Página 1 de 1



Powered by phpBB © 2001, 2005 phpBB Group