PDA

Ver la Versión Completa : [ RECOPILACION ] Comandos para ejecutar consola (Aporte)


Mitrhandir
24/02/16, 19:23:12
Hola amigos Taskerianos!

Abro este hilo para aportar los comandos para ejecutar consola que he ido encontrando aquí y allá. Es lo menos que puedo hacer en agradecimiento a toda la ayuda recibida.

Allá vamos!

am kill (package name)- mata la aplicación.

am force-stop (package name) :fuerza detención de la app.

am force-on (package name) :la pone en marcha

input keyevent 26 :apaga/enciende pantalla.

settings put global airplane_mode_on 0; am broadcast -a android.intent.action.AIRPLANE_MODE --ez state false :apagar modo avion.

settings put global airplane_mode_on 1; am broadcast -a android.intent.action.AIRPLANE_MODE --ez state true :encender modo avión.

pm disable (package name) :congela la aplicación.

pm enable (package name) :descongela la aplicación.

input keyevent 4 :como si le dieras al botón atrás.

cat /proc/meminfo : muestra memoria.

/system/bin/screencap /sdcard/Tasker/test.jpg :captura pantalla.

settings put global low_power 1 : modo ahorro batería on

settings put global low_power 0 :modo ahorro batería off

Por supuesto, podéis aportar los vuestros para ir ampliando la información.

Nos vemos! :cucu:

Edito: Antes de ejecutar nada, recomiendo que busquéis el comando por la red y os aseguréis de que realmente hace lo que he dicho. Yo los he probado todos y he tenido 0 problemas.

cace0353
24/02/16, 19:52:39
Buen aporte, compañero.

Pero pienso (y sugiero a los moderadores del foro) que seria bueno tener un hilo específico para postear/recoger información de aportes que se van haciendo y que pudiesen entrar en una descripción como "Instrucciones y comandos en otros lenguajes utilizables en Tasker en el grupo de acciones Código"

Recientemente he podido comprobar que se pueden hacer muchas cosas con JavaScript y que se acelera mucho el tiempo de ejecución.

Saludos

Mitrhandir
24/02/16, 20:09:50
Hola! Realmente lo he abierto por eso mismo compañero. Porque si buscas en Google, no hay una definición y/o ubicación clara y precisa para rebuscar y encontrar ese comando de que "habías oído hablar" y no encontrabas por ningún lado. El del modo avión por ejemplo, fue una alegría encontrarlo!

Así que, animo a los amigos Taskerianos a que aporten sus comandos!

Un saludo!

Rsc
24/02/16, 23:27:59
Buenas en este hilo que abrí hace tiempo tenéis información relacionada con el comando input

http://www.htcmania.com/showthread.php?t=953071

Mitrhandir
25/02/16, 11:30:41
Gracias por tu aporte compañero! No me queda muy claro para qué sirven, pero investigaré! (mi inglés es pésimo)

Saludos!

Caravantes
25/02/16, 12:42:21
Pero pienso (y sugiero a los moderadores del foro) que seria bueno tener un hilo específico para postear/recoger información de aportes que se van haciendo y que pudiesen entrar en una descripción como "Instrucciones y comandos en otros lenguajes utilizables en Tasker en el grupo de acciones Código"

Gracias por la sugerencia. Creo que lo más oportuno es tratar ese tema en el hilo que tenemos dedicado a
NOTICIAS SOBRE TASKER ; sugerencias y comentarios sobre este foro http://www.htcmania.com/showthread.php?t=564246

Ahí acabo de escribir un post invitando a dialogar sobre ese asunto.
Os doy el enlace directo al post que he escrito: http://www.htcmania.com/showthread.php?p=22192482#post22192482

cace0353
09/03/16, 20:48:49
Tengo un par de consultas referentes a los comandos de consola usando Sqlite3

Estoy aprendiendo a manejar mis bases de datos con este gestor de DB y veo que la velocidad de proceso es la leche....!

En realidad este post nace en una observación de manejo de base de datos que me hizo danko9696 en un post mio de esta semana sobre la consulta, a nivel básico, de los datos de una tabla Excel desde Tasker: http://www.htcmania.com/showthread.php?t=1152543

He transformado mi base de Excel en una base .sq, y, desde Tasker con una acción ejecutar consola>sqlite y el comando:

sqlite3 /sdcard/Download/AjuntamentsBD-1.db "SELECT POBLACIO FROM POBLES_CAT"

me guarda en la variable %nombres la lista de poblaciones (columna POBLACIO).

- El primer problema es que me devuelve una lista con los nombres en filas (comprobado con un flash) y quiero convertir la variable %nombres en una matriz usable en una escena como variable de un elemento Menú

En concreto se refiere a la sintaxis de la expresión:

- IMPORTANTE para el uso con tasker, si la consulta devuelve más de una fila muy recomendable añadir lo siguiente después de la última comilla: |awk '{printf("%s%v_char_separacion",$0)}'
por ej, sqlite3 ...ruta bd y archivo... "SELECT .... FROM ... WHERE ... " |awk '{printf("%s%v_charsplit",$0)}'
Esto hace que cada fila esté separada por el caracter que queramos (%v_charsplit). Yo normalmente uso alguno raro, como el símbolo del yen o del estilo, algo que creas que no va a aparecer en el texto ni de casualidad.Me devuelve error, supongo que no escribo correctamente el caracter elegido. Debo asignar antes a la variable %v_charsplit el código de salto de linea "\n"?

Como lo escribiriais?

- La segunda questión es como "rescatar" los valores de los distintos campos (columnas) de la tabla una vez haya elegido en el menú (con %tap_label) una población?
Cual seria la secuencia de comandos en este caso y como deberia "splitar" el resultado?

Gracias por vuestra ayuda.

WillyWeb
09/03/16, 21:07:51
- El primer problema es que me devuelve una lista con los nombres en filas (comprobado con un flash) y quiero convertir la variable %nombres en una matriz usable en una escena como variable de un elemento Menú

-Establece una variable (%newline) y como valor le pones una línea en blanco (pulsa Intro dentro del campo A).

-Separa tu variable con los datos (%nombres) usando como separador %newline.

cace0353
09/03/16, 23:08:07
Me respondo a la segunda pregunta:

SELECT POBLACIO, C_POSTAL, COMARCA, PROVINCIA, DOMICILI, TELEFON, HABITANTS FROM POBLES_CAT WHERE POBLACIO= '%tap_label'

danko9696
10/03/16, 00:58:58
Tengo un par de consultas referentes a los comandos de consola usando Sqlite3

Estoy aprendiendo a manejar mis bases de datos con este gestor de DB y veo que la velocidad de proceso es la leche....!

En realidad este post nace en una observación de manejo de base de datos que me hizo @danko9696 (http://www.htcmania.com/member.php?u=868681) en un post mio de esta semana sobre la consulta, a nivel básico, de los datos de una tabla Excel desde Tasker: http://www.htcmania.com/showthread.php?t=1152543

He transformado mi base de Excel en una base .sq, y, desde Tasker con una acción ejecutar consola>sqlite y el comando:

sqlite3 /sdcard/Download/AjuntamentsBD-1.db "SELECT POBLACIO FROM POBLES_CAT"

me guarda en la variable %nombres la lista de poblaciones (columna POBLACIO).

- El primer problema es que me devuelve una lista con los nombres en filas (comprobado con un flash) y quiero convertir la variable %nombres en una matriz usable en una escena como variable de un elemento Menú

En concreto se refiere a la sintaxis de la expresión:

- IMPORTANTE para el uso con tasker, si la consulta devuelve más de una fila muy recomendable añadir lo siguiente después de la última comilla: |awk '{printf("%s%v_char_separacion",$0)}'
por ej, sqlite3 ...ruta bd y archivo... "SELECT .... FROM ... WHERE ... " |awk '{printf("%s%v_charsplit",$0)}'
Esto hace que cada fila esté separada por el caracter que queramos (%v_charsplit). Yo normalmente uso alguno raro, como el símbolo del yen o del estilo, algo que creas que no va a aparecer en el texto ni de casualidad.Me devuelve error, supongo que no escribo correctamente el caracter elegido. Debo asignar antes a la variable %v_charsplit el código de salto de linea "\n"?

Como lo escribiriais?

- La segunda questión es como "rescatar" los valores de los distintos campos (columnas) de la tabla una vez haya elegido en el menú (con %tap_label) una población?
Cual seria la secuencia de comandos en este caso y como deberia "splitar" el resultado?

Gracias por vuestra ayuda.
Como separador suelo usar algún caracter raro del teclado, por ejemplo uno de estos ¥√€¢π¤. La idea no solo es que sirva para separar sino que si alguna vez tienes que mirar el resultado en bruto para buscar errores el separador se distinga fácilmente del resto del texto a la vez que no pueda ser contenido en él, por no ser de uso nada habitual.
- Asignar %v_charsplit a ¥ (he puesto ese nombre de variable pero lo puedes adaptar a tu gusto, también puedes usar una variable global).
- Ejecutar shell: ... "SELECT nompob,cp FROM POBLACIONES LIMIT 3" |awk '{printf("%s%v_charsplit",$0)}'
o "SELECT nompob,cp FROM POBLACIONES LIMIT 3" |awk '{printf("%s¥",$0)}', pero prefiero usar variable
población1|cp1¥población2|cp2¥población3|cp3

A partir de ahí espliteas primero por %v_charsplit (o ¥/lo que sea directamente), de modo que ya tienes las filas en un array que puedes meter en un bucle, y luego dentro del bucle espliteas con tubería, que es el usado por defecto los campos (caracter ´|´, altgr+1 normalmente).

cace0353
10/03/16, 09:25:25
A partir de ahí espliteas primero por %v_charsplit (o ¥/lo que sea directamente), de modo que ya tienes las filas en un array que puedes meter en un bucle, y luego dentro del bucle espliteas con tubería, que es el usado por defecto los campos (caracter ´|´, altgr+1 normalmente).

Muy claro ahora danko9696

Veo que con Sqlite3 has puesto en mi caja de herramientas para programación de bricolage otro utensilio muy útil y potente.

Hace algún tiempo mlesir ya me lo aconsejó, pero googleando me parecia demasiado complicado y de entrada no valoré adecuadamente su sugerencia. Una vez metido con estas cuatro cosas elementales ya no me parece tan críptico. La verdad es que ahora, trabajando con los comandos del grupo código Sqlite3 para obtener las matrices de datos y con JavaScript el salto hacia adelante ha sido espectacular!

Para muestra un botón: Reduje, para programar el ejemplo, la base de datos hasta 300 pueblos y, aun así, cargarla suponia unos 5 seg. Ahora, con Sqlite, carga los nombres (solo los nombres) de la lista entera (948 pueblos) en 1 seg! Una vez muestra la lista y mientras la hojeas o seleccionas un filtro, monta la base entera en segundo plano.

Nuevo problema (que no será el último http://www.htcmania.com/images/icons/icon11.gif ):

Para filtrar por el campo COMARCA elijo de un desplegable (elemento "Rueda") el nombre de la comarca. Luego, ya en Sqlite, para filtrar la lista pongo ....WHERE COMARCA = '%tap_label'"

Esto funciona para "casi todos los casos" pero cuando el nombre de la comarca contiene el carácter apóstrofo ' no (Val d'Aran, Pla de l'Estany, Pla d'Urgell,...). Concluyo que Sqlite aprecia que el filtro se acaba en el carácter de marras. Se me ocurre una solución "poco limpia": modificar la base de datos substituyendo el apóstrofe por un espacio.

Cual seria la solución "limpia" para el caso.

Muy agradecido por tus aportes!

Saludos

maid450
10/03/16, 09:49:25
Esto funciona para "casi todos los casos" pero cuando el nombre de la comarca contiene el carácter apóstrofo ' no (Val d'Aran, Pla de l'Estany, Pla d'Urgell,...). Concluyo que Sqlite aprecia que el filtro se acaba en el carácter de marras. Se me ocurre una solución "poco limpia": modificar la base de datos substituyendo el apóstrofe por un espacio.
Se me ocurre que reemplaces los ' que puedan haber en la variable %tap_label por \' antes de ejecutar la query, pienso que por ejemplo:
SELECT POBLACIO, C_POSTAL, COMARCA, PROVINCIA, DOMICILI, TELEFON, HABITANTS FROM POBLES_CAT WHERE POBLACIO= 'Val d\'Aran'debería funcionar, mientras que como comentas
SELECT POBLACIO, C_POSTAL, COMARCA, PROVINCIA, DOMICILI, TELEFON, HABITANTS FROM POBLES_CAT WHERE POBLACIO= 'Val d'Aran' falla porque piensa que la query acaba en el primer ' y el resto lo considera erroneo

cace0353
10/03/16, 10:04:21
Se me ocurre que reemplaces los ' que puedan haber en la variable %tap_label por \' antes de ejecutar la query, pienso que por ejemplo:

Lo siento, no funciona...

Gracias de todos modos, más adelante, si no encuentro otra solución, me iré a lo "sucio"

maid450
10/03/16, 10:31:23
Lo siento, no funciona...

Gracias de todos modos, más adelante, si no encuentro otra solución, me iré a lo "sucio"

Cierto, lo acabo de comprobar... en casi todos los lenguajes se usa \ para "escapar" los caracteres especiales, pero para la ' en sqlite usa '' (dos comillas simples, no una doble) asi que tendrías que reemplazar ' por '' y esta query si debería funcionar
SELECT POBLACIO, C_POSTAL, COMARCA, PROVINCIA, DOMICILI, TELEFON, HABITANTS FROM POBLES_CAT WHERE POBLACIO= 'Val d''Aran'

danko9696
10/03/16, 11:12:10
Muy claro ahora @danko9696 (http://www.htcmania.com/member.php?u=868681)

Veo que con Sqlite3 has puesto en mi caja de herramientas para programación de bricolage otro utensilio muy útil y potente.

Hace algún tiempo @mlesir (http://www.htcmania.com/member.php?u=763408) ya me lo aconsejó, pero googleando me parecia demasiado complicado y de entrada no valoré adecuadamente su sugerencia. Una vez metido con estas cuatro cosas elementales ya no me parece tan críptico. La verdad es que ahora, trabajando con los comandos del grupo código Sqlite3 para obtener las matrices de datos y con JavaScript el salto hacia adelante ha sido espectacular!

Para muestra un botón: Reduje, para programar el ejemplo, la base de datos hasta 300 pueblos y, aun así, cargarla suponia unos 5 seg. Ahora, con Sqlite, carga los nombres (solo los nombres) de la lista entera (948 pueblos) en 1 seg! Una vez muestra la lista y mientras la hojeas o seleccionas un filtro, monta la base entera en segundo plano.

Nuevo problema (que no será el último http://www.htcmania.com/images/icons/icon11.gif ):

Para filtrar por el campo COMARCA elijo de un desplegable (elemento "Rueda") el nombre de la comarca. Luego, ya en Sqlite, para filtrar la lista pongo ....WHERE COMARCA = '%tap_label'"

Esto funciona para "casi todos los casos" pero cuando el nombre de la comarca contiene el carácter apóstrofo ' no (Val d'Aran, Pla de l'Estany, Pla d'Urgell,...). Concluyo que Sqlite aprecia que el filtro se acaba en el carácter de marras. Se me ocurre una solución "poco limpia": modificar la base de datos substituyendo el apóstrofe por un espacio.

Cual seria la solución "limpia" para el caso.

Muy agradecido por tus aportes!

Saludos
Lo puse sobre todo porque me chocaba un poco, ya que si te has atrevido con javascript que menos que iniciarse con sqlite, que requiere mucho menos esfuerzo para manejarlo a nivel básico, y más cuando utilizas bases de datos desde Tasker.
Y no solo es velocidad en bruto. El hecho de poder usar paginación hace que sea incluso mucho más rápido todavía. Si con 948 pueblos es más rápido, ten en cuenta que no puedes mostrar todos los resultados a la vez en pantalla, así que lo suyo es usar paginación con LIMIT. Imagínate como será mostrando solo los 20-40 resultados que puedes tener en pantalla en un mismo momento frente a tener que cargar toda la base de datos cada vez.

Para los apóstrofes no puedes usar el normal, ya que se usa en la sintaxis de sqlite para delimitar cadenas. Lo mejor creo que es cambiarlo por una comilla simple, como ´ (en lugar de '). Muy parecido visualmente pero deja de ser el mismo caracter.

Otra sugerencia es usar siempre un WHERE 1=1 acompañado de una variable filtro que vayas construyendo de acuerdo a cuadros de texto que puedas tener en una escena o procedente de otros sitios. Por ejemplo:
.... WHERE 1=1 %v_filtro_sqlite LIMIT .....

y la variable %v_filtro_sqlite la vas construyendo a base de añadir condiciones según veas, como por ejemplo, siempre añades el AND ..., sabiendo que ya tienes el WHERE en la consulta desde un principio.
- Inicializar %v_filtro_sqlite --> (un espacio)
Y luego según vayas revisando parámetros para usar en la condición, cosas como:
- Asignar %v_filtro_sqlite --> %v_filtro_sqlite AND nompoblacion like '%v_nombre_buscar%'

cace0353
10/03/16, 14:55:12
Lo puse sobre todo porque me chocaba un poco, ya que si te has atrevido con javascript que menos que iniciarse con sqlite, que requiere mucho menos esfuerzo para manejarlo a nivel básico, y más cuando utilizas bases de datos desde Tasker.
Y no solo es velocidad en bruto. El hecho de poder usar paginación hace que sea incluso mucho más rápido todavía. Si con 948 pueblos es más rápido, ten en cuenta que no puedes mostrar todos los resultados a la vez en pantalla, así que lo suyo es usar paginación con LIMIT. Imagínate como será mostrando solo los 20-40 resultados que puedes tener en pantalla en un mismo momento frente a tener que cargar toda la base de datos cada vez.

Para los apóstrofes no puedes usar el normal, ya que se usa en la sintaxis de sqlite para delimitar cadenas. Lo mejor creo que es cambiarlo por una comilla simple, como ´ (en lugar de '). Muy parecido visualmente pero deja de ser el mismo caracter.

Otra sugerencia es usar siempre un WHERE 1=1 acompañado de una variable filtro que vayas construyendo de acuerdo a cuadros de texto que puedas tener en una escena o procedente de otros sitios. Por ejemplo:
.... WHERE 1=1 %v_filtro_sqlite LIMIT .....

y la variable %v_filtro_sqlite la vas construyendo a base de añadir condiciones según veas, como por ejemplo, siempre añades el AND ..., sabiendo que ya tienes el WHERE en la consulta desde un principio.
- Inicializar %v_filtro_sqlite --> (un espacio)
Y luego según vayas revisando parámetros para usar en la condición, cosas como:
- Asignar %v_filtro_sqlite --> %v_filtro_sqlite AND nompoblacion like '%v_nombre_buscar%'
Comprendido, danko9696.

Para lo de los apóstrofes "liantes" modificaré la BD en el CSV con "buscar/reemplazar" substituyendo apóstrofes por acentos sin letra (en el PC se puede, en el móvil no…) y reharé la base.

En cuanto a lo segundo me lo beberé a sorbitos, no sea que me atragante…

En principio lo de paginar las lecturas de la BD parece muy interesante, pero, funcionará cuando los resultados se muestran en un elemento Menú de la escena en donde se ven los nombres desplazando el dedo por la pantalla???

Gracias de nuevo y saludos!

Enviat des del meu SM-T550 usant Tapatalk

danko9696
10/03/16, 15:20:19
Comprendido, @danko9696 (http://www.htcmania.com/member.php?u=868681).

Para lo de los apóstrofes "liantes" modificaré la BD en el CSV con "buscar/reemplazar" substituyendo apóstrofes por acentos sin letra (en el PC se puede, en el móvil no…) y reharé la base.

¿Por qué dices que no se pueden cambiar los acentos desde el móvil?

En principio lo de paginar las lecturas de la BD parece muy interesante, pero, funcionará cuando los resultados se muestran en un elemento Menú de la escena en donde se ven los nombres desplazando el dedo por la pantalla???
No sirve para ese caso, solo para cuando muestras resultados sin scroll.

cace0353
10/03/16, 15:57:33
Porqué (al menos yo no se donde) no tengo acentos sin vocal debajo…

danko9696
10/03/16, 16:18:53
Porqué (al menos yo no se donde) no tengo acentos sin vocal debajo…
Que raro, creo que todos o casi todos los teclados de android lo tienen. Prueba con Touchpal, que es el que uso actualmente con Tasker. Permite tanto comilla simple de apertura como de cierre. Y además (lo uso por eso) tiene un clipboard integrado que viene muy bien para Tasker y KLWP/Zooper (mejor que el que viene de serie en el móvil), ya que permite guardar y asignar nombres a elementos del clipboad muy comodamente para acceder a ellos después.

Caravantes
10/03/16, 16:25:01
Porqué (al menos yo no se donde) no tengo acentos sin vocal debajo…

Esa limitación procede de la app que utilizamos como teclado, y de su configuración. Por ejemplo, los yankees utilizan una configuración de teclado que no les permite escribir vocales acentuadas ni eñes. Podrías probar a cambiar la configuración de teclado (ajustes de Android) a inglés u otro idioma y tal vez de ese modo puedas poner un acento solo, sin vocal. También podrías comprar un teclado físico (normalmente bluetooth) y seguramente resolverías el problema. O bien, puedes probar con otras apps que están especialmente orientadas a manejar caracteres "raros", como las siguientes:
https://play.google.com/store/apps/details?id=com.artech.symbols.characters
https://play.google.com/store/apps/details?id=com.dricodes.simboloseletrasdiferentesf ree
https://play.google.com/store/apps/details?id=jp.wind.petitknyaife.SymbolsPanel
Quizá alguna de ellas te permita poner un acento solo, sin vocal.

danko9696
10/03/16, 16:51:50
Esa limitación procede de la app que utilizamos como teclado, y de su configuración. Por ejemplo, los yankees utilizan una configuración de teclado que no les permite escribir vocales acentuadas ni eñes. Podrías probar a cambiar la configuración de teclado (ajustes de Android) a inglés u otro idioma y tal vez de ese modo puedas poner un acento solo, sin vocal. También podrías comprar un teclado físico (normalmente bluetooth) y seguramente resolverías el problema. O bien, puedes probar con otras apps que están especialmente orientadas a manejar caracteres "raros", como las siguientes:
https://play.google.com/store/apps/details?id=com.artech.symbols.characters
https://play.google.com/store/apps/details?id=com.dricodes.simboloseletrasdiferentesf ree
https://play.google.com/store/apps/details?id=jp.wind.petitknyaife.SymbolsPanel
Quizá alguna de ellas te permita poner un acento solo, sin vocal.
Creo que no es un acento sino una comilla simple, pero el problema creo que es debido a que solo te fijas en el teclado básico, cuando todos los caracteres extra como ese (y los que puse antes como separadores) normalmente se encuentran en el apartado de teclado numérico. Y ese es independiente del idioma. De hecho varios de ellos es más comodo sacarlos en android que en pc, ya que los puedes ver en pantalla y no necesitas conocer un código especial de antemano o apps adicionales.

cace0353
10/03/16, 17:52:13
Esa limitación procede de la app que utilizamos como teclado, y de su configuración. Por ejemplo, los yankees utilizan una configuración de teclado que no les permite escribir vocales acentuadas ni eñes. Podrías probar a cambiar la configuración de teclado (ajustes de Android) a inglés u otro idioma y tal vez de ese modo puedas poner un acento solo, sin vocal. También podrías comprar un teclado físico (normalmente bluetooth) y seguramente resolverías el problema. O bien, puedes probar con otras apps que están especialmente orientadas a manejar caracteres "raros", como las siguientes:

Gracias por vuestra colaboración...

No basta con poder escribir el acento suelto en el campo de búsqueda ya que no coincidiria nunca con el dato guardado en la BD que sigue teniendo el apóstrofe!

De todas maneras, pues, voy a tener que editar la tabla en Excel substituyendo el carácter de la discordia y crear una nueva BD con Sqliteadmin (p.e.) no?

Después me creo, tambien en el PC, el contenido de la variable con los nombres de las comarcas que luego serán los valores de %tap_label (con acentos en lugar de apóstrofes) en un documento de texto en Unicode UTF-8, lo abro en el smartphone, copio el contenido y, en Tasker, en el campo Establecer variable %xxxx A: [PEGAR]

Le veis algún problema?

Otra cosa es que hubiera algun comando para reemplazar todos los caracteres ' de la base de datos por ´(acentos). En este caso si que me plantearia cambiar de teclado (ahora uso A.i.type y me va muy bién)!

Saludos!

danko9696
10/03/16, 17:57:37
Gracias por vuestra colaboración...

No basta con poder escribir el acento suelto en el campo de búsqueda ya que no coincidiria nunca con el dato guardado en la BD que sigue teniendo el apóstrofe!

De todas maneras, pues, voy a tener que editar la tabla en Excel substituyendo el carácter de la discordia y crear una nueva BD con Sqliteadmin (p.e.) no?

Después me creo, tambien en el PC, el contenido de la variable con los nombres de las comarcas que luego serán los valores de %tap_label (con acentos en lugar de apóstrofes) en un documento de texto en Unicode UTF-8, lo abro en el smartphone, copio el contenido y, en Tasker, en el campo Establecer variable %xxxx A: [PEGAR]

Le veis algún problema?

Otra cosa es que hubiera algun comando para reemplazar todos los caracteres ' de la base de datos por ´(acentos). En este caso si que me plantearia cambiar de teclado (ahora uso A.i.type y me va muy bién)!

Saludos!
Supongo que tienes una tarea para pasar los datos del csv a la bd sqlite. Puedes hacer la sustitución ahí, sea con javascript o con la función de tasker de sustituir texto. No debería haber problema. Por cierto, que estoy casi seguro de que el AI Type también permite la comilla simple ´. Me extrañaría muchísimo que no.

cace0353
10/03/16, 18:55:14
Supongo que tienes una tarea para pasar los datos del csv a la bd sqlite. Puedes hacer la sustitución ahí, sea con javascript o con la función de tasker de sustituir texto. No debería haber problema. Por cierto, que estoy casi seguro de que el AI Type también permite la comilla simple ´. Me extrañaría muchísimo que no.
Pues no, lo hago en el PC… , directamente en el Excel.csv y luego tengo un EXE que me crea la base de datos .sq… Me resulta más cómodo de teclear!
Además mi vista no es lo que era. 😎

Si que he visto en el teclado numérico en la TAB estos dos caracteres en el teclado numérico: ' ‘ pero igualmente habia de modificar la BD.

Por cierto, como crear la BD en formato sqlite en Tasker con una tarea (definir los encabezamientos, llenar los campos, etc.) ? Parezco el "preguntón" de la clase…

Por otra parte ya he hecho los cambios en el CSV y solo me falta crear el SQ y el archivo de texto con la lista de comarcas…

De nuevo gracias por vuestra inestimable colaboración. Espero que otros compañeros se aprovechen también y se animen a utilizar estas poderosas herramientas.


Enviat des del meu SM-T550 usant Tapatalk

Mx WaR HaBiB
10/03/16, 21:51:38
buenas... disculpen cual seria el comando para apagar los "Datos"?

se que tiene la función tasker integrada al igual que el plugin Secure Settings pero ninguno de los dos lo apaga.

quiero ver si funciona con comando de consola.

gracias de antemano por su colaboración.

Saludos Masters

Mx WaR HaBiB
10/03/16, 21:52:00
duplicado...

danko9696
11/03/16, 00:34:21
Pues no, lo hago en el PC… , directamente en el Excel.csv y luego tengo un EXE que me crea la base de datos .sq… Me resulta más cómodo de teclear!
Además mi vista no es lo que era. 😎

Si que he visto en el teclado numérico en la TAB estos dos caracteres en el teclado numérico: ' ‘ pero igualmente habia de modificar la BD.

Por cierto, como crear la BD en formato sqlite en Tasker con una tarea (definir los encabezamientos, llenar los campos, etc.) ? Parezco el "preguntón" de la clase…

Por otra parte ya he hecho los cambios en el CSV y solo me falta crear el SQ y el archivo de texto con la lista de comarcas…

De nuevo gracias por vuestra inestimable colaboración. Espero que otros compañeros se aprovechen también y se animen a utilizar estas poderosas herramientas.


Enviat des del meu SM-T550 usant Tapatalk
No entiendo bien lo que estás haciendo. Por un lado comentas que tienes un exe para crear la base de datos (¿un .sq?) y luego preguntas sobre como crear la bd, cuando además anteriormente he puesto como crearla a partir de otra o partiendo de cero. Aparte de que me ha dado la impresión de que ya estabas funcionando con ella, al hacer preguntas sobre las consultas.

buenas... disculpen cual seria el comando para apagar los "Datos"?

se que tiene la función tasker integrada al igual que el plugin Secure Settings pero ninguno de los dos lo apaga.

quiero ver si funciona con comando de consola.

gracias de antemano por su colaboración.

Saludos Masters
Un comando shell sería
setenforce permissive; svc data enable; setenforce enforcing;

y otro
setenforce permissive; svc data disable; setenforce enforcing;

Mx WaR HaBiB
11/03/16, 00:43:36
setenforce permissive; svc data disable; setenforce enforcing;

Me ha servido! :ok: muchas gracias... espero esta recopilación se extienda si agregaran esto al inicio estaría bien para los demás.

gracias! :risitas:

cace0353
11/03/16, 09:55:31
Cita: Originalmente Escrito por cace0353 Ver Mensaje Pues no, lo hago en el PC… , directamente en el Excel.csv y luego tengo un EXE que me crea la base de datos .sq… Me resulta más cómodo de teclear! Además mi vista no es lo que era. �� Si que he visto en el teclado numérico en la TAB estos dos caracteres en el teclado numérico: ' ‘ pero igualmente habia de modificar la BD. Por cierto, como crear la BD en formato sqlite en Tasker con una tarea (definir los encabezamientos, llenar los campos, etc.) ? Parezco el "preguntón" de la clase… Por otra parte ya he hecho los cambios en el CSV y solo me falta crear el SQ y el archivo de texto con la lista de comarcas… De nuevo gracias por vuestra inestimable colaboración. Espero que otros compañeros se aprovechen también y se animen a utilizar estas poderosas herramientas. Enviat des del meu SM-T550 usant Tapatalk No entiendo bien lo que estás haciendo. Por un lado comentas que tienes un exe para crear la base de datos (¿un .sq?) y luego preguntas sobre como crear la bd, cuando además anteriormente he puesto como crearla a partir de otra o partiendo de cero. Aparte de que me ha dado la impresión de que ya estabas funcionando con ella, al hacer preguntas sobre las consultas.

Efectivamente @danko9696 (http://www.htcmania.com/member.php?u=868681), la base de datos la tenia en CSV sacada de una web pública, conservando las columnas que me interesaban y codificada como Unicode UTF-8. En Tasker puro resultaba desesperante hacer consultas y se me "ataskaba" tanto que la habia marginado.

Ahora la utilizo para practicar con comandos de JS y Sqlite3.

La pregunta que hacia era referente a que tú posteaste que podia crearse el archivo .sq a partir del .csv con una tarea de Tasker y te preguntaba como. De momento no es una cuestión crítica ya que lo resuelvo en el PC. Quizás más adelante...

Hoy (uno, que no para cuando tiene un juguete nuevo!) planteo una nueva duda:

De la lista de nombres de poblaciones (entera o ya filtrada) en un elemento Menú de la escena LISTA, cuando "clico" sobre un nombre se ejecuta un comando sqlite que me extrae todos los datos de esta población a una variable %datos, la trocea con "|" y me los muestra en una escena FICHA

Y la pregunta: como puedo navegar desde la escena FICHA por los campos de la lista filtrada con dos botones "Anterior" y "Siguiente"?

En Tasker puro manejaba la lista con dos campos: el NOMBRE de la población y un INDEX que guardaba la posición absoluta de cada población en la tabla general. Entonces, en lugar de utilizar %tap_label utilizaba una variable %guia = %index(%tap_index) que guardaba el número de orden de la población. En la escena FICHA cuando cliqueaba sobre un botón SIGUIENTE ponia %tap_index = %tap_index +1 y luego %guia = index(%tap_index) para acceder a los datos cuyo número de orden era %guia. (no se si me he explicado bién...)

Gracias por tu tutela!

danko9696
11/03/16, 11:23:59
Efectivamente @danko9696 (http://www.htcmania.com/member.php?u=868681), la base de datos la tenia en CSV sacada de una web pública, conservando las columnas que me interesaban y codificada como Unicode UTF-8. En Tasker puro resultaba desesperante hacer consultas y se me "ataskaba" tanto que la habia marginado.

Ahora la utilizo para practicar con comandos de JS y Sqlite3.

La pregunta que hacia era referente a que tú posteaste que podia crearse el archivo .sq a partir del .csv con una tarea de Tasker y te preguntaba como. De momento no es una cuestión crítica ya que lo resuelvo en el PC. Quizás más adelante...

Hoy (uno, que no para cuando tiene un juguete nuevo!) planteo una nueva duda:

De la lista de nombres de poblaciones (entera o ya filtrada) en un elemento Menú de la escena LISTA, cuando "clico" sobre un nombre se ejecuta un comando sqlite que me extrae todos los datos de esta población a una variable %datos, la trocea con "|" y me los muestra en una escena FICHA

Y la pregunta: como puedo navegar desde la escena FICHA por los campos de la lista filtrada con dos botones "Anterior" y "Siguiente"?

En Tasker puro manejaba la lista con dos campos: el NOMBRE de la población y un INDEX que guardaba la posición absoluta de cada población en la tabla general. Entonces, en lugar de utilizar %tap_label utilizaba una variable %guia = %index(%tap_index) que guardaba el número de orden de la población. En la escena FICHA cuando cliqueaba sobre un botón SIGUIENTE ponia %tap_index = %tap_index +1 y luego %guia = index(%tap_index) para acceder a los datos cuyo número de orden era %guia. (no se si me he explicado bién...)

Gracias por tu tutela!
Varias cosas: lo del .sq me extrañaba porque normalmente en android se usa la extensión .db para sqlite, aunque en último termino de igual. En cuanto a convertir la bd, lo normal suele ser tener una base de datos ya creada con la estructura adecuada, y antes de importar los datos del csv la vacías y listo (o no, si lo que quieres es añadir datos sin borrar los previos). Para generar la estructura te recomiendo el programa que comenté antes. También se puede mediante consultas sqlite pero no le veo mucho sentido porque es algo que en principio solo se hace una vez.

El procedimiento que yo haría, a falta de solucionar problemas de codificación: exportas a csv desde excel --> automáticamente se copia a una carpeta del móvil usando sincronización por dropbox o similar --> automáticamente o manualmente una tarea detecta que hay un nuevo archivo csv, vacía la bd sqlite y transfiere los datos del csv a sqlite corrigiendo los datos que haga falta por el camino --> borra el archivo csv. Este sistema te permite mayor control sobre el proceso y usar los nombres y tipos de campos que más te convengan (por ej, tener el cod postal como número o como cadena).

Y relacionado con esto sobre lo de la escena no se si te he entendido bien, ya que casi no he tocado escenas de tasker para introducción de datos. Entiendo que al hacer click en el nombre de la población tienes acceso también a otros campos. Si es así lo que puedes hacer es añadir un campo autonumérico a modo de ID con la app que puse antes (si te fijas todas las tablas suelen tener algún tipo de ID). De este modo si pulsas siguiente desde ficha, en el array de lista (que deberías conservar) te mueves a la derecha y ejecutas consulta para cargar la ficha con nuevos datos usando el ID como referencia (también se podría usar el nombre pero no lo recomiendo). No es tan simple como el sistema que dices pero es más eficiente, ya que te evitas tener cargada la base de datos entera dos veces, teniendo en su lugar la base de datos cargada una vez en una lista filtrada en un array, y otro array con los campos de un solo elemento de la lista.

Mx WaR HaBiB
11/03/16, 16:28:49
setenforce permissive; svc data disable; setenforce enforcing;

hola buen día

nuevamente gracias por el apoyo, tengo una duda que surgió... al momento de ejecutar esta acción se detiene el Bluetooth alguna idea por que se detiene si solo es comando para deshabilitar los datos?

gracias y saludos :ok:

danko9696
12/03/16, 17:33:18
hola buen día

nuevamente gracias por el apoyo, tengo una duda que surgió... al momento de ejecutar esta acción se detiene el Bluetooth alguna idea por que se detiene si solo es comando para deshabilitar los datos?

gracias y saludos :ok:
Ni idea. A mi solo me desactiva los datos, no se por qué no es tu caso.

Mx WaR HaBiB
12/03/16, 18:07:21
Ni idea. A mi solo me desactiva los datos, no se por qué no es tu caso.

primeramente gracias por responder :ok: , en mi caso si los desactiva pero inhabilita el bluetooth aun este encendido se vuelve a apagar solo y no inicia... como uso un Wear... pues no me funciona al igual si activo "enable" se enciende los datos pero sigue sin funcionar el bluetooth hasta que hice wipe dalvik y cache funciono.

¿a ustedes les funciona correctamente el apagar los datos en tasker como tarea?

serian tan amables de probarlo? :dios: es que a mi no me lo apaga.

gracias y saludos! :cucu:

danko9696
12/03/16, 21:59:01
primeramente gracias por responder :ok: , en mi caso si los desactiva pero inhabilita el bluetooth aun este encendido se vuelve a apagar solo y no inicia... como uso un Wear... pues no me funciona al igual si activo "enable" se enciende los datos pero sigue sin funcionar el bluetooth hasta que hice wipe dalvik y cache funciono.

¿a ustedes les funciona correctamente el apagar los datos en tasker como tarea?

serian tan amables de probarlo? :dios: es que a mi no me lo apaga.

gracias y saludos! :cucu:
No habría posteado el comando si no lo usase, y como he puesto antes a mi no me da ningún problema.

cace0353
13/03/16, 19:54:59
Hola de nuevo, sigo traskeando y tengo una pequeña cuestión sobre sqlite3:

¿Como se puede reemplazar el carácter separador "|" cuando se me muestra el resultado de una extracción por dos columnas de una base de datos en Sqlite?

Lo he intentado en Tasker, antes y después de separar los datos, con buscar y reemplazar sobre la variable de salida pero sin resultado…

También he probado el comando .separator " - " , dentro de la acción sqlite, pero nada…

El problema es que hago una consulta de Poblaciones y Habitantes ordenada por el n° habitantes y la salida se me muestra p.e. así: "Arenys de Mar|14657" cuando preferiria un resultado como "Arenys de Mar - 14.657"

EDITO: Parcialmente solucionado "interpretando" una acción que copié letra a letra de un post para hacer consultas en la agenda…

sqlite3 /sdcard/BDades/CAT_2016.db "SELECT POBLACIO, HABITANTS FROM Municipis WHERE COMARCA = '%triat' OR PROVINCIA = '%triat' ORDER BY HABITANTS DESC " | awk -F "|" '{print $1" -",$2}'

Falta sólo formatear $2 con separación de miles…

Enviat des del meu SM-T550 usant Tapatalk

mlesir
13/03/16, 23:47:55
Esta solución me la paso si no me equivoco Maid450:

....DESC LIMIT 9;" |awk '{printf("%s¢",$0)}

Te los separa con "¢".

Enviado desde mi T1-701u mediante Tapatalk

cace0353
14/03/16, 09:15:28
Gracias mlesir, pero esto resuelve la primera parte del problema que ya solucioné ayer y que pubiqué editando el post…

Queda por solucionar la segunda parte: formatear el entero HABITANTS para que se muestre con separación de millares.

Anzuelo para los especialistas WillyWeb, danko9696 y el "resucitado" maid450…


Enviat des del meu SM-T550 usant Tapatalk

maid450
14/03/16, 11:53:24
formatear el entero HABITANTS para que se muestre con separación de millares
La forma más facil que se me ocurre es con javascript, suponiendo que tengas la variable %habitants en Tasker:


habitants = parseInt(habitants, 10).toLocaleString();
El parseInt convierte el string en un numero decimal puro, y despues se llama a la funcion toLocaleString que devuelve el numero formateado según las reglas del locale (configuración regional) que tengas configurado.
En caso de que te lo ponga diferente se puede forzar un locale, pero en Español (y supongo que tambien en Catalán) los enteros los formatea con "." como separador de millares como quieres.

cace0353
14/03/16, 12:20:46
Gracias maid450 (veo que estás al "loro") pero creo que no me va a servir porque el comando de Sqlite me devuelve una lista sacada de la DB con dos valores separados con un "tubo"como una única línea en la pantalla, y el formato deberia darse dentro de la acción con un parámetro AWK.

O acaso me estoy liando? (soy muy novato aún…)

maid450
14/03/16, 14:13:39
He estado investigando un poco y parece que se puede hacer con awk, pero yo desde luego no lo he conseguido hacer funcionar...
Personalmente estoy siempre más comodo con Javascript, así que yo descartaría el awk (que va muy bien para hacer todo de golpe cuando quieres algo simple, pero en este caso se complica) y haría algo así, suponiendo que el resultado de ejecutar la SELECT la guardes en %resultado:


var lineas = resultado.split("\n");
resultado = "";
for(i in lineas) {
campos = lineas[i].split("|");
resultado += campos[0] + ' - ' + (parseInt(campos[1], 10).toLocaleString()) + "\n";
}


- Separo el resultado por fines de linea para sacar un array con un resultado (linea) por posición
- Borro resultado y lo iré sobreescribiendo para que al final del codigo %resultado tenga el valor esperado sin crear más variables nuevas.
- Recorro las lineas (uso el formato de "for" alternativo, se podría usar el típico for(var i = 0; i < lineas.length; i++) pero para estos casos así lo veo más claro)
- Separo los campos por la tubería y queda un array con el valor de POBLACIO en la posición 0 y el de HABITANTS en 1
- Genero la linea concatenando la información

cace0353
14/03/16, 15:40:22
He estado investigando un poco y parece que se puede hacer con awk, pero yo desde luego no lo he conseguido hacer funcionar...
Personalmente estoy siempre más comodo con Javascript, así que yo descartaría el awk (que va muy bien para hacer todo de golpe cuando quieres algo simple, pero en este caso se complica) y haría algo así, suponiendo que el resultado de ejecutar la SELECT la guardes en %resultado:


var lineas = resultado.split("\n");
resultado = "";
for(i in lineas) {
campos = lineas[i].split("|");
resultado += campos[0] + ' - ' + (parseInt(campos[1], 10).toLocaleString()) + "\n";
}
- Separo el resultado por fines de linea para sacar un array con un resultado (linea) por posición
- Borro resultado y lo iré sobreescribiendo para que al final del codigo %resultado tenga el valor esperado sin crear más variables nuevas.
- Recorro las lineas (uso el formato de "for" alternativo, se podría usar el típico for(var i = 0; i < lineas.length; i++) pero para estos casos así lo veo más claro)
- Separo los campos por la tubería y queda un array con el valor de POBLACIO en la posición 0 y el de HABITANTS en 1
- Genero la linea concatenando la información

Hola de nuevo maid450, gracias por intentar ayudarme!

Lo he estado probando y no funciona. Explico que he hecho:

He escrito en una acción JavaScriplet lo que me sugieres y no hace nada.... :(

Entonces he ido poniendo sentencias flash(var_loquesea) a cada paso obteniendo resultados positivos hasta que ha fallado... devuelve el resultado de la variable campos pero ya no compone el primer resultado (resultado[0]) con la separación por millares...

¿Puede ser que no tenga implementadas las funciones "parseInt" y "toLocaleString" en JavaScript?

Lo tengo escrito exactamente así:

var lineas = (poblacio.split("\n"));
poblacio = "";
for(i in lineas)
{
camps = lineas[i].split("|");
flash(camps[0] + "---" + camps[1]);
poblacio += camps[0] + ' - ' + (parseInt(camps[1], 10).toLocaleString()) + "#";
}Saludos

danko9696
14/03/16, 15:58:23
Hola de nuevo, sigo traskeando y tengo una pequeña cuestión sobre sqlite3:

¿Como se puede reemplazar el carácter separador "|" cuando se me muestra el resultado de una extracción por dos columnas de una base de datos en Sqlite?

Lo he intentado en Tasker, antes y después de separar los datos, con buscar y reemplazar sobre la variable de salida pero sin resultado…

También he probado el comando .separator " - " , dentro de la acción sqlite, pero nada…

El problema es que hago una consulta de Poblaciones y Habitantes ordenada por el n° habitantes y la salida se me muestra p.e. así: "Arenys de Mar|14657" cuando preferiria un resultado como "Arenys de Mar - 14.657"

EDITO: Parcialmente solucionado "interpretando" una acción que copié letra a letra de un post para hacer consultas en la agenda…

sqlite3 /sdcard/BDades/CAT_2016.db "SELECT POBLACIO, HABITANTS FROM Municipis WHERE COMARCA = '%triat' OR PROVINCIA = '%triat' ORDER BY HABITANTS DESC " | awk -F "|" '{print $1" -",$2}'

Falta sólo formatear $2 con separación de miles…

Enviat des del meu SM-T550 usant Tapatalk
Para concatenar los campos no necesitas awk, basta con usar doble tubería:
SELECT pob || ' - ' || hab as campo1 FROM ....

Para formatear el número probablemente se pueda con sqlite en la propia consulta, usando CASE...WHEN...

cace0353
14/03/16, 19:00:21
Para concatenar los campos no necesitas awk, basta con usar doble tubería: SELECT pob || ' - ' || hab as campo1 FROM .... Para formatear el número probablemente se pueda con sqlite en la propia consulta, usando CASE...WHEN...

Correcto danko9696, funciona perfectamente y mucho más limpio...

En cuanto a lo del formateo del nº de habitantes he estado googleando y, al parecer, no es posible con comandos dentro de Sqlite3.

Habrá que seguir investigando a ver si con AWK puede resolverse porque no me ha funcionado con sentencias JS tal como apuntaba el compañero maid450... (ten en cuenta que hasta hace pocos dias no me habia metido con JS y estoy madurando paso a paso a través de este proyecto de prácticas)

maid450
15/03/16, 00:06:22
Buenas, primero que nada pienso que igual lo más correcto sería abrir un hilo para este tema, ya que al fin y al cabo eso era una recopilación de comandos de shell y se está yendo de las manos xD.
Dicho esto (y si eso lo abres y ya seguimos allí) que no tengas las funciones me extraña, pero es fácil de comprobar, haz una tarea nueva con sólo un js que haga

flash(parseInt(1234567, 10).toLocaleString());

Y si muestra 1.234.567 es que tienes las funciones (a mi me ha funcionado en mi móvil).

Si es así (que es lo más probable) el fallo está en lo que se le está pasando al parseInt: camps[1] que no tendrá el número a pelo que es lo que hay que pasarle.

De los 2 problemas, el separar por un guión y el poner el punto de los millares, el primero en efecto tiene varias soluciones y todas correctas: en la propia query como apunta danko, con awk en el shell o con js (y seguro que hay más).
Si ahí acabara todo me decantaría por la primera, porque es la más óptima y más limpia, pero para el segundo punto, por lo que he visto no parece que haya otra forma más que con js, y para ello hay que trocear la respuesta, formatear el número, y recomponerla, y por eso creo que es mejor dejar la query con el select a pelo devolviendo los 2 campos separados por tuberías, porque si no tienes a sqlite componiendo un resultado que js va a trocear completamente y recomponerlo otra vez, con lo que se hace un paso para deshacerlo después. No sé si me he explicado bien... jeje

Dicho esto, cace, después de comprobar si tienes las funciones con el código que he puesto antes necesito que pongas de nuevo el script que has hecho, pero con "flashes" a cada paso y que indiques en cada paso del script el valor de cada variable (un ejemplo del formato al menos) a ver si vemos qué falla.
Y si no tienes las funciones pues tendremos que hacer el pino-puente, pero algo sacaremos 😛

Enviado desde mi Nexus 5 mediante Tapatalk

danko9696
15/03/16, 01:00:03
Sí, lo suyo seria quizás un hilo específico para SQLITE o uno para este caso concreto porque se está desviando un poco, no se si los admin podrán mover posts de un hilo a otro.

Respecto al formateo vuelvo a comentar que pienso que se debería poder hacer en sqlite usando CASE WHEN THEN, usando como condiciones <=999, >=1000 AND <999999 y >=1000000, troceando/recomponiendo con tuberías y SUBSTR. La consulta quedaría algo más extensa y difícil de ver pero una vez hecho queda todo en ella. Con un poco de paciencia no debería ser muy complicado.

Lo haría yo mismo pero ahora estoy con otra cosa algo más liosa y no quiero perder el hilo.

cace0353
15/03/16, 10:43:13
Hola de nuevo maid450 y gracias por colaborar tan eficazmente a resolver estos "problemillas" que estoy teniendo...

Buenas, primero que nada pienso que igual lo más correcto sería abrir un hilo para este tema, ya que al fin y al cabo eso era una recopilación de comandos de shell y se está yendo de las manos xD.

Bueno, creo que el tema, como verás más adelante, está casi resuelto y, a menos que algún moderador lo considere conveniente, podemos seguir aquí.

.... pero es fácil de comprobar, haz una tarea nueva con sólo un js que haga

flash(parseInt(1234567, 10).toLocaleString());
Y si muestra 1.234.567 es que tienes las funciones (a mi me ha funcionado en mi móvil).No me funcionó..., pero me dí cuenta de que arriba a la derecha en el editor de la acción de JS no estaba la flecha blanca que sirve para comprobar la sintaxis...! y además yo también tengo el Nexus5 como tú y deberia rular...!

De hecho habia estado casi toda la tarde haciendole perrerias y me dije: "Vamos a reiniciar no sea que..." Reinicio total "et voilà" funcionó!!!.:-)

Si es así (que es lo más probable) el fallo está en lo que se le está pasando al parseInt: camps[1] que no tendrá el número a pelo que es lo que hay que pasarle.

De los 2 problemas, el separar por un guión y el poner el punto de los millares, el primero en efecto tiene varias soluciones y todas correctas: en la propia query como apunta danko, con awk en el shell o con js (y seguro que hay más).
Si ahí acabara todo me decantaría por la primera, porque es la más óptima y más limpia, pero para el segundo punto, por lo que he visto no parece que haya otra forma más que con js, y para ello hay que trocear la respuesta, formatear el número, y recomponerla, y por eso creo que es mejor dejar la query con el select a pelo devolviendo los 2 campos separados por tuberías, porque si no tienes a sqlite componiendo un resultado que js va a trocear completamente y recomponerlo otra vez, con lo que se hace un paso para deshacerlo después. No sé si me he explicado bien... jeje Correctísimo, te has explicado muy bién! Para que cambiar el caracter de división si luego debo operar toda la variable de salida de Sqlite en el JavaScriptlet?

Dicho esto, cace, después de comprobar si tienes las funciones con el código que he puesto antes necesito que pongas de nuevo el script que has hecho, pero con "flashes" a cada paso y que indiques en cada paso del script el valor de cada variable (un ejemplo del formato al menos) a ver si vemos qué falla.
Y si no tienes las funciones pues tendremos que hacer el pino-puente, pero algo sacaremos Estoy en ello, de momento en la escena FICHA que me aparece con todos los datos de la población al clicar sobre su nombre en la lista ya tengo el texto con formato, también cuando desde la FICHA cliqueo sobre las flechas "siguiente" y "anterior".
Sólo falta pulir lo que comentas de meter "flashes" a cada línea para encontrar la que falla....

Muchas gracias de nuevo y saludos a todos.

PD: en el PC el código en JS que pusiste con el "splitado" de la variable "resultado" en tu post aparece mal formateado y no es correcto...

cace0353
15/03/16, 11:00:23
Ys está, perfecto @maid450 (http://www.htcmania.com/member.php?u=184834)!, ha funcionado a la primera :platano::platano::platano:
La consulta Sqlite con variable de salida %poblacio.

sqlite3 /sdcard/BDades/CAT_2016.db "SELECT POBLACIO,HABITANTS FROM Municipis WHERE COMARCA = '%triat' OR PROVINCIA = '%triat' ORDER BY HABITANTS DESC "La acción JavaScriplet que le sigue:

var lineas = poblacio.split( "\n" ); //aqui se acaba la primera linea
poblacio = "";
for (i in lineas)
{
camps = lineas[i].split("|");
poblacio += camps[0] + " - " + (parseInt(camps[1], 10).toLocaleString()) + "|";
}He substituido el código de salto de linea final \n por el tubo ya que luego en Tasker separo la variable directamente...

Un millón (1.000.000) de gracias!

danko9696
23/03/16, 20:19:11
Le he estado dando algo más de caña a sqlite. Estaba casi seguro de que debía funcionar y así es. He hecho alguna cosa parecida a lo que haría falta para este caso, que sería más o menos:

CASE
WHEN habitantes<999 THEN habitantes
WHEN habitantes >999 AND habitantes<=999999
THEN SUBSTR(habitantes,1,LENGTH(habitantes)-3) || '.' || SUBSTR(habitantes,LENGTH(habitantes)-3+1,3)
WHEN habitantes >999999
THEN .... <lo mismo, jugar con SUBSTR y demas>
.
.
END
AS habitantesformateado

Aparatoso pero una vez hecho queda todo encapsulado en la consulta y más rápido si tienes que repetir el proceso muchas veces.

cace0353
24/03/16, 11:07:30
Le he estado dando algo más de caña a sqlite. Estaba casi seguro de que debía funcionar y así es. He hecho alguna cosa parecida a lo que haría falta para este caso, que sería más o menos:

CASE
WHEN habitantes<999 THEN habitantes
WHEN habitantes >999 AND habitantes<=999999
THEN SUBSTR(habitantes,1,LENGTH(habitantes)-3) || '.' || SUBSTR(habitantes,LENGTH(habitantes)-3+1,3)
WHEN habitantes >999999
THEN .... <lo mismo, jugar con SUBSTR y demas>
.
.
END
AS habitantesformateado

Aparatoso pero una vez hecho queda todo encapsulado en la consulta y más rápido si tienes que repetir el proceso muchas veces.

Gracias danko9696 por tu interés (no sé porqué será, pero a los que programamos por afición los retos, propios o ajenos, nos estimulan cantidad!)

Estoy subscrito a este hilo y lo sigo a diario. Probaré en la próxima el método que sugieres. En realidad ya habia intentado el método de fragmentar la cadena incial por grupos de 3 cifras insertando los puntos en JS, pero no me acababa de funcionar por algún error de sintaxis (estoy en 1º aún...)

De momento lo he resuelto como describo en el post #47 de este mismo hilo.

Lo que hago en el programa definitivo son dos consultas con Sqlite siempre que elijo con un botón uno de los criterios de búsqueda: Lista global, Lista por la Provincia elegida en un desplegable Rueda, Lista por la Comarca elegida en otro desplegable Rueda, Lista por nombre elegido en un campo de texto editable.

- Primera consulta por POBLACIO ordenada ASC y guardada en %població
- Segunda consulta por POBLACIO,HABITANTS ordenada por HABITANTS DESC y guardada en %habitants

Luego separo la variable %poblacio y "redibujo" la escena.

Si le doy al boton de Ordenar por habitantes una primera vez, guarda %poblacio en una variable %temporal y establezco como %poblacio lo que contiene %habitants (es decir la lista de pares POBLACIO - HABITANTS ordenada por nº de habitantes) para el conjunto de poblaciones que se muestra en pantalla de acuerdo con los filtros que se hayan puesto. Se ejecuta el JS que descompone y formatea los resultados y se muestra la escena otra vez.

Si de doy al botón Ordenar por habitantes una segunda vez se comporta como un commutador: pone en %poblacio lo que antes habia guardado en %temporal (es decir la lista que contiene sólo los nombres) separa la variable y muestra de nuevo la escena.

https://dl.dropboxusercontent.com/u/13481585/Poblacio.jpg

El resultado és muy eficiente: para mostrar la lista completa de la base de datos (948 poblaciones) ordenada por población está entre 0,79 y 1,12 seg. un rayo, vamos!

Y pensar que, en Tasker puro tardaba 12 seg para mostrar la lista reducida de 500 poblaciones! Tenia incluso una pantalla de espera tranquilizadora para que me contara lo que estaba haciendo... que ahora, evidentemente, he suprimido.

danko9696
24/03/16, 17:07:24
El resultado és muy eficiente: para mostrar la lista completa de la base de datos (948 poblaciones) ordenada por población está entre 0,79 y 1,12 seg. un rayo, vamos!

Y pensar que, en Tasker puro tardaba 12 seg para mostrar la lista reducida de 500 poblaciones! Tenia incluso una pantalla de espera tranquilizadora para que me contara lo que estaba haciendo... que ahora, evidentemente, he suprimido.
En la tarea de un perfil que uso pasé de unos 130 segundos al pasar de una primera versión sin terminar en Tasker puro a menos de un segundo en la final (y con más cosas añadidas) casi totalmente JS y con solo una consulta (bastante gorda eso sí, de unos 130k), así que no te digo nada XDD

cace0353
30/03/16, 21:46:05
Hola de nuevo,

Estoy haciéndome una aplicación para la navegación en coche que utiliza una base de datos hecha a partir de la lista de radares de puntodeinteres.com

Pretendo obtener con Sqlite la lista de radares que cumplen simultaneamente 4 condiciones:

Longitud entre %x_min , %x_max
Latitud entre %y_min , %y_max

He probado de ampliar el rango de búsqueda pero no me funciona…

Lo tengo escrito así:

sqlite3 /sdcard/BDades/RADARS.db "SELECT * FROM SITUACIO WHERE LONGITUD BETWEEN '%x_min' AND '%x_max' AND LATITUD BETWEEN '%y_min' AND '%y_max' "

He probado también de encadenar las cuatro condiciones AND sin los BETWEEN pero tampoco…

Alguien me echa una manita?

Gracias!

Enviat des del meu SM-T550 usant Tapatalk

danko9696
30/03/16, 22:08:13
Hola de nuevo,

Estoy haciéndome una aplicación para la navegación en coche que utiliza una base de datos hecha a partir de la lista de radares de puntodeinteres.com

Pretendo obtener con Sqlite la lista de radares que cumplen simultaneamente 4 condiciones:

Longitud entre %x_min , %x_max
Latitud entre %y_min , %y_max

He probado de ampliar el rango de búsqueda pero no me funciona…

Lo tengo escrito así:

sqlite3 /sdcard/BDades/RADARS.db "SELECT * FROM SITUACIO WHERE LONGITUD BETWEEN '%x_min' AND '%x_max' AND LATITUD BETWEEN '%y_min' AND '%y_max' "

He probado también de encadenar las cuatro condiciones AND sin los BETWEEN pero tampoco…

Alguien me echa una manita?

Gracias!

Enviat des del meu SM-T550 usant Tapatalk
¿Has probado la consulta en una aplicación aparte que no sea Tasker (eso debería ser lo primero)? ¿Has probado con solo tres parámetros (dos, uno, ninguno)?.

Sin más info a priori parece cosa de que el formato de los datos que envías es distinto de como están en la base de datos, suponiendo que estos sean correctos (¿punto decimal?).

cace0353
30/03/16, 22:44:39
¿Has probado la consulta en una aplicación aparte que no sea Tasker (eso debería ser lo primero)? ¿Has probado con solo tres parámetros (dos, uno, ninguno)?.

Sin más info a priori parece cosa de que el formato de los datos que envías es distinto de como están en la base de datos, suponiendo que estos sean correctos (¿punto decimal?).
Si, lo he probado (con números, no se como hacerlo con variables definidas en Tasker) en SQLite debugger y funciona.

El punto es el punto para permitirme operaciones matematicas y las columnas de la tabla que no necesitaba las eliminé. Las consultas con SQLite debugger como he comprobado funcionan, y los campos de coordenadas los definí como de coma flotante…

Voy a hacer un repaso minucioso de la tarea a ver que pasa. Es que tenia dudas acerca de la sintaxis adecuada del filtro BETWEEN.

En cuanto lo pueda resolver lo notificaré.

Si al final va a resultar que es cualquier chorrada…


Enviat des del meu SM-T550 usant Tapatalk

maid450
31/03/16, 08:12:57
lo mejor para depurar es que pongas una acción "copiar en el portapapeles" que copie el comando que finalmente se va a ejecutar con el reemplazo de variables hecho por Tasker y tal, y coges y lo ejecutas tal cual en un terminal o te quedas con la query en si y la ejecutas en el SQLite debugger

danko9696
31/03/16, 10:46:43
lo mejor para depurar es que pongas una acción "copiar en el portapapeles" que copie el comando que finalmente se va a ejecutar con el reemplazo de variables hecho por Tasker y tal, y coges y lo ejecutas tal cual en un terminal o te quedas con la query en si y la ejecutas en el SQLite debugger
Yo añadiría que lo mejor es tener la consulta siempre en una variable, precísamente por eso. Así solo la tienes una vez, es más comodo para copiarla al portapapeles o mostrarla en un flash/popup y sencillamente se ve mejor cuando miras el código, aunque sea una linea más.

cace0353
31/03/16, 14:42:16
Ya está, y al final era una chorrada:

Resulta que la salida de Tasker para las variables %LOCN y %LOC és en la forma LATITUD, LONGITUD. en cambio la lista de coordenadas de la base de radares de puntodeinteres.com tiene el formato LONGITUD, LATITUD, TIPO, VELOCIDAD....

La consulta en Sqlite estaba bién, incluso he añadido después un BETWEEN para el ángulo (para que me coja sólo los del sentido en el que circulo). El problema real era que buscaba radares de España en medio del Atlántico, a 340 Km de la desembocadura del Amazonas... Con razón la variable de salida de la consulta estaba siempre vacia aunque ampliara el radio de búsqueda a 100 km.!

Muchas gracias y saludos!