Tasker Para hablar de todo lo relacionado con la aplicación tasker


 
Herramientas
  #1  
Viejo 11/06/15, 21:54:25
Avatar de WillyWeb
WillyWeb WillyWeb no está en línea
Usuario muy activo
Mensajes: 2,067
 
Fecha de registro: dic 2008
Localización: Hoy aquí y mañana allí
Mensajes: 2,067
Modelo de smartphone: OnePlus 3T | Xiaomi 9T Pro
Versión de ROM: OxygenOS 9.0.6 | MIUI 12.5.1
Versión de Radio: Stock
Tu operador: Vodafone
Mencionado: 75 comentarios
Tagged: 3 hilos
Alternativa a "Separar variable" para sacar datos de un archivo de texto

Muy buenas a tod@s

Sigo repasando el recopilatorio en modo esponja y no paro de encontrar ideas realmente brillantes.

El listón está muy alto y no es nada fácil aportar ideas nuevas, pero he visto en más de un proyecto algo que yo hago de otra forma ... sacar información de un archivo de texto descargado (xml, html y cosas así).

En casi todos los proyectos se descarga el archivo con "HTTP Get", se pasa el contenido de la variable global %HTTPD a una local y se trocea esa variable con "Separar variable" para ir "entresacando" la parte que interesa. Indudablemente el sistema funciona, es cuestión de repetir la acción tantas veces como sea necesario para "acorralar" el trozo de información que se necesita.

No digo que siempre, pero la mayor parte de las veces eso se puede hacer más fácilmente usando una "expresión regular" en la acción "Buscar y Reemplazar".

Lo explico con un ejemplo...

Supongamos que quieres saber la dirección de una ubicación de GPS (para saber en qué calle has dejado aparcado el coche, por ejemplo). Para eso podemos recurrir al "Google Maps Geocoding API" y descargar un XML con la información requerida.

https://maps.googleapis.com/maps/api...6947,-3.703529

Código:
<?xml version="1.0" encoding="UTF-8"?>
<GeocodeResponse>
 <status>OK</status>
 <result>
  <type>street_address</type>
  <formatted_address>Plaza Puerta del Sol, 11, 28013 Madrid, Madrid, España</formatted_address>
  <address_component>
   <long_name>11</long_name>
   <short_name>11</short_name>
   <type>street_number</type>
  </address_component>
  <address_component>
   <long_name>Plaza Puerta del Sol</long_name>
   <short_name>Plaza Puerta del Sol</short_name>
   <type>route</type>
  </address_component>

... y así más de 600 líneas.
Lo que nos interesa está entre las etiquetas <formatted_address>, y yo lo extraigo así...

Código:
A1: Buscar y Reemplazar Contenido de Variable [ Variable:%HTTPD Buscar:<formatted_address>.*?</formatted_address> Una sola coincidencia:Encendido Almacenar Coincidencias En:%httpd ]
A2: Buscar y Reemplazar Contenido de Variable [ Variable:%httpd1 Buscar:<.*?> Reemplazar Coincidencias:Encendido Reemplazar Con:nada ]
La primera acción saca de la variable %HTTPD (la variable de Tasker asociada a HTTP Get) todo lo que está entre las primeras etiquetas <formatted_address> que encuentre y lo deja en %httpd1.

La segunda acción elimina de %httpd1 todo lo que tenga el aspecto de una etiqueta.

Edito para añadir la excelente sugerencia de mlesir de usar look around asertions

Cambiando la expresión regular que he puesto en A1 por esta otra ...

(?<=<formatted_address>).*?(?=</formatted_address>)

... el resultado que buscamos es inmediato y no necesitamos A2, así que la cosa quedaría así ...

Código:
A1: Buscar y Reemplazar Contenido de Variable [ Variable:%httpd Buscar:(?<=<formatted_address>).*?(?=</formatted_address>) Una sola coincidencia:Encendido Almacenar Coincidencias En:%httpd ]
Y ahora sí. El resultado está en%httpd1 limpio de polvo y paja

Hasta la próxima ...

Última edición por WillyWeb Día 01/03/16 a las 16:31:09 Razón: Incluir la sugerencia de mlesir de usar "look around asertions"
Responder Con Cita
Los siguientes 3 usuarios han agradecido a WillyWeb su comentario:
[ Mostrar/Ocultar listado de agradecimientos ]


  #2  
Viejo 11/06/15, 22:12:07
Avatar de mlesir
mlesir mlesir no está en línea
Usuario muy activo
Mensajes: 2,263
 
Fecha de registro: abr 2012
Mensajes: 2,263
Modelo de smartphone: OnePlus One,BQ Edison1, GoogleChrome,
Versión de ROM: 4.4 Cyanogen
Tu operador: Pepephone
Mencionado: 36 comentarios
Tagged: 2 hilos
Bueno ante todo Willy gracias y enhorabuena por la aportación.

La segunda acción sobraría si usas los look around asertions.
Básicamente lo que hacen es coger la coincidencia que esta entre los look arounds pero sin incluir estos en el resultado. Tienes la información aquí:

http://developer.android.com/referen...x/Pattern.html

Sigue aportando y compartiendo así, a mucha gente le servirá. Espero que lo te he comentado te sirva para mejorar tu idea.
Responder Con Cita
Los siguientes 2 usuarios han agradecido a mlesir su comentario:
  #3  
Viejo 11/06/15, 22:17:06
Avatar de WillyWeb
WillyWeb WillyWeb no está en línea
Usuario muy activo
Mensajes: 2,067
 
Fecha de registro: dic 2008
Localización: Hoy aquí y mañana allí
Mensajes: 2,067
Modelo de smartphone: OnePlus 3T | Xiaomi 9T Pro
Versión de ROM: OxygenOS 9.0.6 | MIUI 12.5.1
Versión de Radio: Stock
Tu operador: Vodafone
Mencionado: 75 comentarios
Tagged: 3 hilos
Pues gracias por la información. No conocía esa posibilidad. Lo probaré en Tasker y ya contaré el resultado
Responder Con Cita
Gracias de parte de:
  #4  
Viejo 12/06/15, 11:08:35
Avatar de WillyWeb
WillyWeb WillyWeb no está en línea
Usuario muy activo
Mensajes: 2,067
 
Fecha de registro: dic 2008
Localización: Hoy aquí y mañana allí
Mensajes: 2,067
Modelo de smartphone: OnePlus 3T | Xiaomi 9T Pro
Versión de ROM: OxygenOS 9.0.6 | MIUI 12.5.1
Versión de Radio: Stock
Tu operador: Vodafone
Mencionado: 75 comentarios
Tagged: 3 hilos
Ya está probado...

Tasker "traga" perfectamente con ese tipo de expresión y, como decía mlesir, con una pequeña modificación en la primera acción se puede evitar la segunda. Cambiando la expresión regular que puse en mi ejemplo por esta otra ...

(?<=<formatted_address>).*?(?=</formatted_address>)

... el resultado que buscamos es inmediato.

Por cierto, por la forma en que Tasker se comporta ante las expresiones regulares (no requiere escapar ciertos caracteres especiales) yo diría que es compatible con el formato de regex que se usa en python.

El que quiera aprender más sobre el tema de los "lookaround" que mire en...

(la página propuesta por mlesir)
http://developer.android.com/referen...x/Pattern.html

(dos páginas con más detalles y ejemplos)
http://www.rexegg.com/regex-lookarounds.html
http://www.regular-expressions.info/lookaround.html

(páginas que suelo utilizar para probar las regex)
https://regex101.com
http://www.rexv.org

Estoy cambiando unas tareas en las que usaba todo esto. En lo que las tenga listas las comparto.

Gracias colega ... me encantan estas cosas

Última edición por WillyWeb Día 12/06/15 a las 12:50:11
Responder Con Cita
Los siguientes 2 usuarios han agradecido a WillyWeb su comentario:
Respuesta

Estás aquí
Regresar   HTCMania > Todo sobre Android > Otro software para Android > Tasker


Reglas de Mensajes
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Las caritas están On
Código [IMG] está On
Código HTML está Off

Saltar a Foro



Hora actual: 20:38:29 (GMT +1)

Cookies settings
Powered by vBulletin™
Copyright © vBulletin Solutions, Inc. All rights reserved.
 
HTCMania: líderes desde el 2007