|
||
|
![]() |
![]() |
Tasker Para hablar de todo lo relacionado con la aplicación tasker |
![]() |
|
Herramientas |
#1
|
||||
|
||||
Eliminar espacio en blanco al principio de una cadena
Un pequeño problema con los espacios en blanco: tengo una variable %resultado que compongo con otras variables obtenidas en distintas partes de la tarea: %parte1,%parte2,%parte3… (una por línea)
En la obtención de las diferentes %parte pongo una condición Establecer Variable: %parte a " " (un espacio en blanco sin las comillas) si la variable no está asignada, ya que Tasker no me permite dejarla vacía. Esto motiva que en el texto visualizado final aparezcan espacios en blanco innecesarios al principio de algunas lineas que afean el resultado en pantalla. Hay alguna solución o "truco" en Tasker o Javascript que resuelva el problema? Enviat des del meu SM-T550 usant Tapatalk
__________________
Me apasiona volar, pero con los pies en el suelo...
Última edición por cace0353 Día 01/03/17 a las 22:15:40. |
|
#2
|
||||
|
||||
Pues imagino que hay dos maneras de hacerlo en javascript, la mejor manera, sería componer %resultado directamente con javascript, no incluyendo las variables con el caracter " ", dependiendo de los valores que puedan tomar tus %parte, podrás usar unos metodos u otros, pero si nunca empiezan por espacios con un startsWith(" "), si es true, no lo añades.
En caso de que pudieran empezar con un espacio, pues ya tendríamos que saber más sobre esas variables para poder apañarlo Un saludo
__________________
Tutorial sobre el mundo de las roms GNexus
Las OTA's llevan a la ira, la ira lleva al flaseo, el flaseo lleva al lado oscuro de Android. |
#3
|
||||
|
||||
Gracias por contestar @fus,
Soy relativamente nuevo en JS y voy aprendiendo poco a poco. No conocia este comando. Podrías expresar (para mí y para otros compañeros que quieran aprender) como sería la sintaxis de uso en este caso? Enviat des del meu Nexus 5 usant Tapatalk
__________________
Me apasiona volar, pero con los pies en el suelo...
|
#4
|
||||
|
||||
Voy a pensar que tus variables NUNCA empiezan por un espacio, por lo que quedaría algo así
Tambien ten en cuenta que no se el número de partes que puede tener tu variable %resultado, ni que contienen las variables, por lo que es más difícil ateclarlo. Basicamente tendríamos una serie de if's que irían añadiendo las variables a un String, si el nnúmero de partes es fijo, como imagino que es el caso, pues es mucho más sencillo Código:
var resultado = ""; if(parte1.startsWith(" ") == false){ resultado = resultado + parte1; } //Y continuamos añadiendo un if por cada parte, cambiando el numero de parte if(parte2.startsWith(" ") == false){ resultado = resultado + parte2; } . . . ![]() Edito: Como no se muy bien como maneja JavaScript el tema de la suma de variables, o como pasa Tasker las variables, no se si sería necesario añadir .toString() al final de parteX en la asignación de resultados, si te funciona así la tarea, pues nos podemos dar con un canto en los dientes
__________________
Tutorial sobre el mundo de las roms GNexus
Las OTA's llevan a la ira, la ira lleva al flaseo, el flaseo lleva al lado oscuro de Android. Última edición por fus Día 01/03/17 a las 23:39:35. |
Gracias de parte de: | ||
#5
|
||||
|
||||
Clarísimo así, muchas gracias!
Mañana me meto en ello… Enviat des del meu Nexus 5 usant Tapatalk
__________________
Me apasiona volar, pero con los pies en el suelo...
|
#6
|
||||
|
||||
No me he podido resistir:
Probado y funcionando…! EDITO: No funciona. Cuando ayer hice la prueba inserté el código JS antes de la composición que hacía en Tasker puro y no borré estas acciones. En la madrugada no hay resultados vacíos y, por tanto se vé bien. Esta mañana he borrado la parte en Tasker puro y la acción JS me devuelve %resultat. Habrá que seguir probando… Gracias! Enviat des del meu Nexus 5 usant Tapatalk
__________________
Me apasiona volar, pero con los pies en el suelo...
Última edición por cace0353 Día 02/03/17 a las 09:43:50. |
#7
|
||||
|
||||
Detalles a tener en cuenta cuando se trabaja con JS en Tasker:
-Las variables locales de Tasker pasan automáticamente a JS. -Las variables globales de Tasker se tienen que pasar a JS con global("Variable"). -Para que una variable de JS pase a Tasker como local vale con declararla con "var". -Para que una variable de JS pase a Tasker como global se tiene que usar setGobal("Variable",valor). -Las variables que pasen de JS a Tasker tienen que respetar todo lo relativo a su formato. -El trasiego de arrays es un poco "especial". Es mejor evitarlos. Si quieres quitar los espacio a ambos lados de una cadena puedes hacer esto... str = " Hola "; str = str.trim(); alert(str); << verás la cadena sin espacios Si lo que quieres es comprobar si una cadena está vacía antes de hacer cualquier cosa con ella puedes hacer esto... if (str>"") {acciones si contiene algo;} ...o esto otro... if (str=="") {acciones si no contiene algo;} En ambos casos puedes añadir un "else" para gestionar el caso contrario.
__________________
Miembro del equipo que promueve el [Subforo de Tasker]
Si das pescado a un hombre hambriento le nutres una jornada. Si le enseñas a pescar le nutrirás toda la vida. (Lao-Tsé - Filósofo chino) Última edición por WillyWeb Día 02/03/17 a las 12:11:26. Razón: Añadir más detalles |
Gracias de parte de: | ||
#8
|
||||
|
||||
Con Tasker puro y duro se podría intentar mediante la acción SECCIÓN DE VARIABLE, indicando que tome todos los caracteres a partir del segundo, y que lo haga (condición) si la variable equivale (~) a UN ESPACIO seguido de cualquier cosa. Pero surgen dos problemas.
1. Creo que no hay forma de decirle que tome (a partir del segundo carácter) todos los caracteres restantes. Hay que poner un número concreto, y si pones un número alto (más que la longitud de la cadena) entonces da error. 2. Al asignar valor a una variable se puede poner un espacio, o un espacio seguido de otros caracteres/variables, pero a la hora de poner una condición no se puede hacer eso. La condición es que la variable equivale (~) a un espacio seguido de un asterisco (ese asterisco representa cualquier cosa), pero Tasker no memoriza ese espacio inicial y por ese motivo la condición no funcionará. Para que funcione hay que utilizar una variable auxilar (%espacio) que contenga un espacio, y de esa forma ya es posible establecer la condición de que la variable a chequear equivalga a %espacio* (un espacio seguido de un asterisco que representa cualquier cosa). O sea que finalmente necesitaríamos tres acciones. Supongamos que tu variable es %parte y quieres quitarle el espacio inicial, en el caso de que lo tenga. 1 Establecer variable %espacio a " " (un espacio, sin las comillas). 2 Probar variable, tipo Longitud, variable %parte, almacenar resultado en %longitud 3 Sección de variable %parte, desde 2, longitud %longitud-1, si %parte coincide con %espacio* Supongo que con Javascript y/o con Regexp se podrá hacer mejor y más breve.
__________________
Firmado: Caravantes, miembro del equipo que promueve el Subforo de Tasker
|
Gracias de parte de: | ||
#9
|
||||
|
||||
Así a bote pronto, si la intención es usar sólo acciones de Tasker yo lo intentaría con "Buscar y Reemplazar" con una RegEx apropiada...
http://es.lmgtfy.com/?q=trim+with+regex
__________________
Miembro del equipo que promueve el [Subforo de Tasker]
Si das pescado a un hombre hambriento le nutres una jornada. Si le enseñas a pescar le nutrirás toda la vida. (Lao-Tsé - Filósofo chino) |
Los siguientes 2 usuarios han agradecido a WillyWeb su comentario: | ||
#10
|
||||
|
||||
¿Por qué lo haces así? No des valor a la variable y luego gestiona si esa parte se añade al resultado final con un "IF %parte Ajustado".
__________________
Miembro del equipo que promueve el [Subforo de Tasker]
Si das pescado a un hombre hambriento le nutres una jornada. Si le enseñas a pescar le nutrirás toda la vida. (Lao-Tsé - Filósofo chino) |
Los siguientes 2 usuarios han agradecido a WillyWeb su comentario: | ||
#11
|
||||
|
||||
Bueno, primero de todo agradecer vuestros intentos de ayuda...
Voy a intentar fijar más claramente el problema (que no és funcional sino sólo de visualización al mostrar los resultados en pantalla): Se trata de una tarea para obtener la previsión del tiempo en función del lugar donde estés, en España, hecha a partir de la versión "clásica" que se publicó hace tiempo en el foro y que he ido mejorando compactando acciones usandó código JS e introduciendo consultas a una base de datos SQL para obtener los códigos INE a partir del código postal sacado con un HTTPget de la web de Google. Con el código INE y mediante un nuevo HTTPget de la web de AEMET obtengo las previsiones del tiempo para hoy y para mañana y preparo tres variables: %result_mati, %result_tarda y %result_vespre que contienen el texto que me aparecerá en pantalla y que está preparado para ser leído con una acción Decir. (Para obtener las de mañana hago un nuevo barrido del resultado %HTTPD cortando en lugar de <dia fecha="%hoy"> en </dia> que es donde empieza la prevision de mañana y se genera otro juego de resultados) El contenido de cada una de las tres variables contiene la previsión correspondiente al período. Por ejemplo, para la mañana, %result_mati contiene las previsiones del período de horas 06 a 12 y queda así: "Mañana: estado del cielo %cielom. Temperatura entre %tempm_min y %tempm_max grados. Viento de %ventm kilómetros por hora del %dirm. Probabilidad de lluvia del %lluviam %" Monto las cadenas igualmente para la tarde y para la noche. Como sabreis AEMET va vaciando de contenido los datos de horas cubiertas. Es decir que las variables parciales %cielom, %tempm_min, %tempm_max, %ventm, %dirm y %lluviam quedan vacias más o menos a partir del mediodia y se leerian como "tanto por ciento %cielom" etc. Entonces, para poder componer el texto que se mostrará (y se leerá a voluntad mediante un botón de la escena) pongo condiciones IF para las previsiones para la mañana y para la tarde: IF %hora < 12 | %Dema = 1 Establecer variable %result_mati A:Mañana: estado del cielo %cielom. Temperatura entre %tempm_min y %tempm_max grados. Viento de %ventm kilómetros por hora del %dirm. Probabilidad de lluvia del %lluviam % (Decir lee % como "tanto por ciento") Else Establecer variable %result_mati A: (un espacio, ya que no puedo dejar la asignación vacia EndIf IF %hora < 18 | %Dema = 1 Establecer variable %result_tarda A:Tarde:estado del cielo %cielot. Temperatura entre %tempt_min y %tempt_max... etc. Else Establecer variable %result_tarda A: (un espacio, ya que no puedo dejar la asignación vacia EndIf (%hora és una extracción con Separar Variable de %TIME para obtener sólo la hora y %Dema es una variable global que hace que se muestren las previsiones para hoy o para mañana cambiando con un boton de la escena su valor a 1, en cuyo caso se mostrarán todas independientemente de la hora) Al final del proceso compongo una variable %resultat_dia que contiene %result_mati %result_tarda %result_vespre en lineas separadas y se muestra en pantalla. El problema aparece cuando no hay resultados de la mañana porqué son más de las 12 del mediodia: %result_mati = " " (un espacio en blanco por acción del Else...). Esto causa que no se muestre en pantalla nada para la mañana y aparezcan sólo los resultados de la tarde y de la noche. Por efecto de aquel espacio en blanco el texto de la previsión para la tarde queda un espacio hacia la derecha. Si sólo hay resultado para la noche (a partir de las 18) entonces me aparecen dos espacios en blanco al principio de la linea... ---- Al final he resuelto el tema poniendo en las definiciones de %result_mati y %result_tarda una linea en blanco al final del texto y componiendo la variable %resultat_dia así: %result_mati%result_tarda%result_vespre. Los resultados se desplazan una línea hacia abajo, pero como sobra espacio (hay una o dos previsiones menos...) "no problem".
__________________
Me apasiona volar, pero con los pies en el suelo...
Última edición por cace0353 Día 02/03/17 a las 23:13:32. |
Los siguientes 2 usuarios han agradecido a cace0353 su comentario: | ||
#12
|
||||
|
||||
si la intención es usar sólo acciones de Tasker yo lo intentaría con "Buscar y Reemplazar" con una RegEx apropiada...
http://es.lmgtfy.com/?q=trim+with+regex ![]() ![]() Que bueno ![]() Eso sí que ha sido un enlace sutil ![]() ![]() ![]() Algún día te haré caso ![]()
__________________
Firmado: Caravantes, miembro del equipo que promueve el Subforo de Tasker
|
Gracias de parte de: | ||
#13
|
||||
|
||||
@Caravantes: no es la primera vez que lo hace… 😊
Es pura fidelidad a su firma en el foro! Aunque, en el fondo, tiene razón… Enviat des del meu Nexus 5 usant Tapatalk
__________________
Me apasiona volar, pero con los pies en el suelo...
|
Gracias de parte de: | ||
#14
|
||||
|
||||
__________________
Miembro del equipo que promueve el [Subforo de Tasker]
Si das pescado a un hombre hambriento le nutres una jornada. Si le enseñas a pescar le nutrirás toda la vida. (Lao-Tsé - Filósofo chino) |
Los siguientes 2 usuarios han agradecido a WillyWeb su comentario: | ||
#15
|
||||
|
||||
No me he podido resistir:
Probado y funcionando…! EDITO: No funciona. Cuando ayer hice la prueba inserté el código JS antes de la composición que hacía en Tasker puro y no borré estas acciones. En la madrugada no hay resultados vacíos y, por tanto se vé bien. Esta mañana he borrado la parte en Tasker puro y la acción JS me devuelve %resultat. Habrá que seguir probando… Gracias! Enviat des del meu Nexus 5 usant Tapatalk ![]() |
#16
|
||||
|
||||
__________________
Miembro del equipo que promueve el [Subforo de Tasker]
Si das pescado a un hombre hambriento le nutres una jornada. Si le enseñas a pescar le nutrirás toda la vida. (Lao-Tsé - Filósofo chino) |
Gracias de parte de: | ||
#17
|
||||
|
||||
Gracias de parte de: | ||
#18
|
||||
|
||||
Un pequeño problema con los espacios en blanco: tengo una variable %resultado que compongo con otras variables obtenidas en distintas partes de la tarea: %parte1,%parte2,%parte3… (una por línea)
En la obtención de las diferentes %parte pongo una condición Establecer Variable: %parte a " " (un espacio en blanco sin las comillas) si la variable no está asignada, ya que Tasker no me permite dejarla vacía. Esto motiva que en el texto visualizado final aparezcan espacios en blanco innecesarios al principio de algunas lineas que afean el resultado en pantalla. Hay alguna solución o "truco" en Tasker o Javascript que resuelva el problema? Enviat des del meu SM-T550 usant Tapatalk ![]() Otra forma muy sencilla para solucionar este problema: 1º Con "Probar variable" se mide la longitud de la cadena a tratar almacenando su valor en %long (variable provisional). 2º Con "Sección de Variables", Desde: 2 y Longitud: %long-1. Almacenar Resultado en la misma variable de la cadena original o en otra nueva. Agradecer a WillyWeb su ayuda en mi consulta para poder realizar el punto 1º. Un saludo. |
Los siguientes 3 usuarios han agradecido a ea8rx su comentario: | ||
![]() |
![]() |
||||||
|