Ver la Versión Completa : Eliminar espacio en blanco al principio de una cadena
cace0353
01/03/17, 22:12:34
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
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
cace0353
01/03/17, 23:09:47
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
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
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;
}
.
.
.
Imagino que esto se podría hacer de una forma más elegante, sabiendo más sobre dichas partes :silbando:
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
cace0353
01/03/17, 23:40:01
Clarísimo así, muchas gracias!
Mañana me meto en ello…
Enviat des del meu Nexus 5 usant Tapatalk
cace0353
01/03/17, 23:49:04
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
WillyWeb
02/03/17, 10:39:26
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.
Caravantes
02/03/17, 16:56:06
Eliminar espacio en blanco al principio de una cadena
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.
WillyWeb
02/03/17, 17:05:34
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
WillyWeb
02/03/17, 18:09:05
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.
Ahora que me fijo bien...
¿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".
cace0353
02/03/17, 22:56:41
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".
Caravantes
02/03/17, 23:33:39
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
:oh:
Que bueno :sisi1:
Eso sí que ha sido un enlace sutil :risitas: :risitas: :risitas:
Algún día te haré caso :besito:
cace0353
02/03/17, 23:41:08
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
WillyWeb
02/03/17, 23:56:23
Eso sí que ha sido un enlace sutil :risitas: :risitas: :risitas:
Es que no tenía tiempo de ponerme a buscarlo. Pero que os quede claro que esas cosas siempre las digo desde el cariño. :toti:
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
Hola, ¿como saber la longitud de una cadena? Gracias.
WillyWeb
01/11/17, 20:00:48
Hola, ¿como saber la longitud de una cadena? Gracias.
Acción de Tasker "Probar Variable".
Acción de Tasker "Probar Variable".
Gracias.
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.
vBulletin® v3.8.1, Copyright ©2000-2026, Jelsoft Enterprises Ltd.