• Publicidad

Filtrar contenido de un texto

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Filtrar contenido de un texto

Notapor FredoX » 2012-02-06 12:24 @558

Buen día.

Antes que nada soy super nuevo en el mundo de Perl así que no sé mucho del tema... :roll:

Tengo unos GPS que me envían información a un modem GSM por mensaje de texto SMS, ya tengo listo el script que se conecta vía telnet y lee los mensajes almacenados. Pero el mensaje me viene en el siguiente formato:

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
Lat: N10.21614
Long: W67.34032
Speed:85.34KM/H
Direction:257
Date:2012-02-03
Time:21:14:46
BS:01775B1A
FIX:A
ID:356823032280906
STATE:SMS
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Necesito filtrar el texto para obtener únicamente la longitud y latitud... para guardarlo en mi base de datos... Algo como esto:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. $lat= N10.21614
  2. $long= W67.34032;
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Cualquier pista me ayudaría mucho :( ...

Muchas gracias.
FredoX
Perlero nuevo
Perlero nuevo
 
Mensajes: 2
Registrado: 2012-02-06 12:11 @549

Publicidad

Re: Filtrar contenido de un texto

Notapor explorer » 2012-02-06 12:47 @574

Bienvenido a los foros de Perl en español, FredoX.

Con una expresión regular sencilla lo puedes conseguir:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use 5.010;
  3. use strict;
  4. use warnings;
  5. use diagnostics;
  6.  
  7. my $mensaje = '
  8. Lat: N10.21614
  9. Long: W67.34032
  10. Speed:85.34KM/H
  11. Direction:257
  12. Date:2012-02-03
  13. Time:21:14:46
  14. BS:01775B1A
  15. FIX:A
  16. ID:356823032280906
  17. STATE:SMS';
  18.  
  19. my($latitud,$longitud) = $mensaje =~ /Lat: (.+)\s*Long: (.+)$/m;
  20.  
  21. say "[$latitud, $longitud]";
  22.  
  23. __END__
  24. [N10.21614, W67.34032]
Coloreado en 0.001 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: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Filtrar contenido de un texto

Notapor FredoX » 2012-02-06 13:27 @602

:shock:

Muchas gracias, me funcionó a la perfección :mrgreen:.

La solución era bien simple :oops: , eso es lo que pasa cuando no se conoce un lenguaje... Espero estudiarlo con calma para poder entenderlo :roll: ..

Gracias nuevamente.
FredoX
Perlero nuevo
Perlero nuevo
 
Mensajes: 2
Registrado: 2012-02-06 12:11 @549

Re: Filtrar contenido de un texto

Notapor explorer » 2012-02-06 17:34 @774

La línea 19, my($latitud,$longitud) = $mensaje =~ /Lat: (.+)\s*Long: (.+)$/m;, hace esto:

  • a $mensaje se le va a aplicar una expresión regular (=~)
  • el patrón es lo que está entre los delimitadores '/'
  • buscamos el patrón dentro de $mensaje. Lo que buscamos es: el literal 'Lat: ', seguido de cualquier cosa (.+), que capturaremos (con los paréntesis), hasta cero o más espacios en blanco (el carácter de avance de línea, normalmente), seguido del literal 'Long: ', seguido por cualquier cosa(.+), que capturaremos (con los paréntesis), hasta el final de esa línea ($)
  • Como lo que hay a mano izquierda de la expresión regular es una lista (dos variables), el resultado de la expresión regular es la lista de las capturas hechas. Entonces, cada captura es introducida en la variable correspondiente.
Las expresiones regulares es una de las partes más importantes de Perl.

Por si quieres empezar con Perl: por dónde empezar.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Básico

¿Quién está conectado?

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

cron