Ver la Versión Completa : Ejercicios de verano (sacar los números de una frase)
WillyWeb
02/07/18, 11:00:49
La amiga Viki sigue con sus preguntas del millón...
Uso AutoVoice para capturar una frase que contiene uno o dos números. La frase puede de esta forma ...
bla bla 2 bla bla 5 bla
... o de esta otra ...
bla bla 3 bla bla
En el primer caso quiero este resultado ...
%primero=2
%segundo=5
Y en el otro caso quiero esto ...
%primero=3
%segundo=0
*Aclaro que los números no siempre son esos.
Como supongo que no todo el mundo tiene/usa AutoVoice vamos a cambiar un poco la primera premisa y partiremos de estas dos cadenas de texto ...
%textouno=si tienes 5 y te quito 3 te quedan
%textodos=no tienes valor a quitarme 3
Venga que esta es muy fácil. ;-)
WillyWeb
04/07/18, 07:56:00
¿Nadie tiene una idea para solucionar esto? :oh:
:maburro:
Caravantes
04/07/18, 18:29:54
¿Nadie tiene una idea para solucionar esto?
No uso Autovoice.
Desde el punto de vista de Tasker, se me ocurre empezar estableciendo %primero=0 y %segundo=0. Luego hacer un blucle recorriendo los caracteres de la frase y comprobando la coincidencia del carácter con alguno de los elementos 0/1/2/3/4/5/6/7/8/9; en caso afirmativo...
A) comprobar si la variable %primero sigue a cero; en ese caso o guardar ahí el carácter encontrado, en caso contrario guardarlo en %segundo.
B) hacer un push para meter ese carácter en un array; al terminar pasar los valores del array a %primero y %segundo (solo los valores que hayan sido establecidos en el array).
WillyWeb
04/07/18, 19:08:03
Otra idea en esa línea...
-Convertir la frase en un array (separando por los espacios)
-Recorrer el array con un bucle comprobando si el elemento es un número*
-Si es un número usar tus soluciones A o B
*Mejor eso que comparar con caracteres. De esa forma cubres la posibilidad de que el número tenga más de un dígito.
Todo esto usando acciones de Tasker, aunque en este caso creo la mejor solución es tirar de regex. :pensando:
Caravantes
04/07/18, 19:25:20
Por los ejemplos que habías puesto, yo había deducido que los números solo tendrían un dígito.
Un array con separación por espacios abrevia bastante, pero no lo contemplé porque me pareció que en algunas ocasiones puede ocurrir que un número no esté rodeado de espacios.
%textouno=si tienes 5, y te quito 3... te quedan
En algunos problemas, ciertos detalles de este tipo pueden determinar cuál es la solución adecuada.
WillyWeb
04/07/18, 19:55:41
Pues tienes razón con lo de la coma. :oh:
La verdad es que la Taskera no comentaba nada de eso.
GraphicAdventure
05/07/18, 11:05:44
En el caso de AutoVoice eso no ocurre a no ser que digas "coma" y se añade a la frase.
WillyWeb
05/07/18, 11:24:49
Un array con separación por espacios abrevia bastante, pero no lo contemplé porque me pareció que en algunas ocasiones puede ocurrir que un número no esté rodeado de espacios.
En el caso de AutoVoice eso no ocurre a no ser que digas "coma" y se añade a la frase.
Aclarado. Caravantes, al ejercicio. ;-)
Caravantes
05/07/18, 23:27:26
He puesto al principio cuatro frases para probarlas. La que juega es la que está colocada en la última posición. Cambiándolas de orden puedo probar las otras.
A1: Establecer variable [ Nombre:%texto A:si tienes 5 y te quito 3 te quedan Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ]
A2: Establecer variable [ Nombre:%texto A:no tienes valor a quitarme 3 Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ]
A3: Establecer variable [ Nombre:%texto A:tengo 30 y 50 y 70 y más Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ]
A4: Establecer variable [ Nombre:%texto A:No tengo nada Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ]
A5: Establecer variable [ Nombre:%texto A:Tengo 0 pero debo 25 Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ]
A6: Establece Array [ Matriz de Variables (array):%txtarray Values:%texto Separador: ]
A7: For [ Variable:%item Ítems:%txtarray() ]
A8: Si (if) [ %item > 0 | %item ~ 0 ]
A9: Si (if) [ %primero No ajust. ]
A10: Establecer variable [ Nombre:%primero A:%item Recurse Variables:Apagado Calcular:Encendido Añadir:Apagado ]
A11: Else Si (if) [ %segundo No ajust. ]
A12: Establecer variable [ Nombre:%segundo A:%item Recurse Variables:Apagado Calcular:Encendido Añadir:Apagado ]
A13: Ir a acción [ Tipo:Etiqueta Acción Número:1 Etiqueta:Exit ]
A14: Fin si (End if)
A15: Fin si (End if)
A16: End For
A17: Establecer variable [ Nombre:%primero A:0 Recurse Variables:Apagado Calcular:Encendido Añadir:Apagado ] Si (if) [ %primero No ajust. ]
A18: Establecer variable [ Nombre:%segundo A:0 Recurse Variables:Apagado Calcular:Encendido Añadir:Apagado ] Si (if) [ %segundo No ajust. ]
<Exit>
A19: Flash [ Texto:%txtarray()
%primero
%segundo Largo:Apagado ]
Los resultados son
%texto = si tienes 5 y te quito 3 te quedan
%primero=5
%segund0=3
%texto = no tienes valor a quitarme 3
%primero=3
%segund0=0
%texto = tengo 30 y 50 y 70 y más
%primero=30
%segund0=50
%texto = Tengo 0 pero debo 25
%primero=0
%segund0=25
Es aceptable? Un aprobadillo, espero. :malabares:
WillyWeb
06/07/18, 08:43:15
Es aceptable? Un aprobadillo, espero.
Traducción literal del proceso mental ... :ok:
Y una vez que tenemos un algoritmo que funciona nos podemos entretener en afinarlo. Con un poco de práctica lo haces/afinas al vuelo, pero esa es la forma de hacerlo. Al manos es la que yo he seguido siempre. ;-)
:aplaudit:
vBulletin® v3.8.1, Copyright ©2000-2025, Jelsoft Enterprises Ltd.