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


 
Herramientas
  #1  
Viejo 08/03/14, 21:54:45
Avatar de cace0353
cace0353 cace0353 no está en línea
Usuario muy activo
Mensajes: 504
 
Fecha de registro: may 2010
Localización: Arenys de Mar (B)
Mensajes: 504
Modelo de smartphone: Pixel 8 Pro - 256 Gb.
Versión de ROM: Stock
Versión de Radio: Stock
Tu operador: Jazztel
Mencionado: 11 comentarios
Tagged: 0 hilos
Quitar un elemento de una matriz y grabar el resto en un fichero de texto

Estoy aprendiendo con Tasker a base de un proyecto que he empezado y al que he ido añadiendo funcionaledades.
En este momento tengo en una escena una serie de botones para operar y una escena superpuesta que contiene los datos de una matriz que se guardan (cada una y con los datos de cada punto separados por punto y coma para poderlos extraer luego y mostrarlos en la escena superpuesta) en una linea de un fichero de texto. Es decir leo el archivo a una matriz, separo cada linea con un simbolo! (%matriz1 %matriz2 matriz3 matriz4...) y luego extraigo los datos de cada una de estas matrices utilizando el separador ;. Hasta aquí funciona.
Tengo ya preparada en la escena un botón para eliminar registros de esta base de datos (lineas del fichero de texto) pero no atino con la solución.
He probado, viendo ejemplos del foro, con "Array pop" pero no me va.
Lo he intentando eliminando el elemento concreto de la matriz (p.e. %matriz3), borrando el fichero de texto y volviendo a escribir los datos que quedan (una vez borrado %matriz3) en el archivo de texto con un bucle For. Pero tampoco...
Me podeis ayudar? Dónde está el problema?
Imágenes Adjuntas
Tipo de Archivo: jpg Screenshot_2014-03-08-21-06-52.jpg (47.0 KB, 78 visitas)

Última edición por cace0353 Día 13/03/14 a las 10:22:35 Razón: Cambiar título y marcarlo como solucionado
Responder Con Cita


  #2  
Viejo 08/03/14, 22:34:15
Avatar de Caravantes
Caravantes Caravantes no está en línea
Usuario muy activo
Mensajes: 2,200
Compra y venta: (1)
 
Fecha de registro: feb 2011
Mensajes: 2,200
Modelo de smartphone: Samsung Galaxy S9
Versión de ROM: Android 8
Tu operador: Lowi
Mencionado: 59 comentarios
Tagged: 4 hilos
Cita:
Originalmente Escrito por cace0353 Ver Mensaje
He probado, viendo ejemplos del foro, con "Array pop" pero no me va.
Si vemos la tarea (y esa acción concreta) tal vez podamos descubrir qué estás haciendo mal.
Si no lo vemos, podemos especular: Yo digo que seguramente sea culpa de Rajoy.
Responder Con Cita
  #3  
Viejo 09/03/14, 00:52:40
Avatar de cace0353
cace0353 cace0353 no está en línea
Usuario muy activo
Mensajes: 504
 
Fecha de registro: may 2010
Localización: Arenys de Mar (B)
Mensajes: 504
Modelo de smartphone: Pixel 8 Pro - 256 Gb.
Versión de ROM: Stock
Versión de Radio: Stock
Tu operador: Jazztel
Mencionado: 11 comentarios
Tagged: 0 hilos
Hola Caravantes, gracias por tu interés.

He retocado tanto la acción sobre el "clic" que al final la he eliminado totalmente (no hay acción alguna)... Puro desquicio!

He hecho un c&p de la tarea que tengo en el botón de eliminar toda la base de datos y que funciona correctamente usando un bucle FOR, borra el archivo complerto y las lineas leidas en cada una de las matrices hija. Variables usadas:

%Punts = matriz que contiene todas las lineas del archivo Punts.txt (%Punts1 %Punts2 %Punts3, son cada una de la lineas que contienen (cada una) el conjunto de valores para cada punto separados por ;
%Nombre_punt = nº de puntos guardados (lineas del archivo)
%Indexpunt = nº (índice) del punto mostrado en la ventana central.

Task: Anon (26)
A1: Eliminar archivo [ Archivo:Punts-GPS/Punts.txt Nivel de Borrado:0 Usar Root:Apagado Continuar Tarea Tras Error:Encendido ]
A2: Flash [ Texto:S'han esborrat els %Nombre_punt punts guardats! Largo:Apagado ]
A3: For [ Variable:%Punts Ãtems:%Punts(%Nombre_punt) ]
A4: Limpiar variable [ Nombre:%Punts(%Nombre_punt) Coincidencia de Patrón:Apagado ]
A5: Establecer variable [ Nombre:%Indexpunts A:0 Calcular:Apagado Añadir:Apagado ]
A6: End For
A7: Establecer variable [ Nombre:%Nombre_punt A:0 Calcular:Apagado Añadir:Apagado ]

Edito: no tiene importancia pero veo que A5 deberia estar fuera del bucle...

Última edición por cace0353 Día 09/03/14 a las 00:55:45
Responder Con Cita
  #4  
Viejo 09/03/14, 06:50:26
Avatar de Caravantes
Caravantes Caravantes no está en línea
Usuario muy activo
Mensajes: 2,200
Compra y venta: (1)
 
Fecha de registro: feb 2011
Mensajes: 2,200
Modelo de smartphone: Samsung Galaxy S9
Versión de ROM: Android 8
Tu operador: Lowi
Mencionado: 59 comentarios
Tagged: 4 hilos
Cita:
Originalmente Escrito por cace0353 Ver Mensaje
He retocado tanto la acción sobre el "clic" que al final la he eliminado totalmente (no hay acción alguna)... Puro desquicio!
He hecho un c&p de la tarea que tengo en el botón de eliminar toda la base de datos y que funciona correctamente usando un bucle FOR, borra el archivo complerto y las lineas leidas en cada una de las matrices hija.
La verdad es que no consigo entender lo que quieres comunicarnos: Has copiado una tarea que según tú funciona bien, y entonces ... ¿Qué quieres que hagamos?
¿Ya no te interesa arreglar la tarea que te fallaba con la acción ARRAY POP?
¿Cuál es el problema? ¿O tal vez ya no hay ningún problema?
Responder Con Cita
  #5  
Viejo 09/03/14, 08:25:37
Avatar de mlesir
mlesir mlesir no está en línea
Usuario muy activo
Mensajes: 2,263
 
Fecha de registro: abr 2012
Mensajes: 2,263
Modelo de smartphone: OnePlus One,BQ Edison1, GoogleChrome,
Versión de ROM: 4.4 Cyanogen
Tu operador: Pepephone
Mencionado: 36 comentarios
Tagged: 2 hilos
La verdad es que lo único claro es el título jeje.
Ciñéndome a el te digo: para borrar una línea X de un archivo la única manera es escribirlo otra vez sin esa línea. De esa manera lo sobrescribe.
Ea decir si tienes diez líneas y quieres quitar la 5 tendrás que hacer un array pop del Elemento 5 y luego escribir el nuevo array en el mismo archivo SIN marcar añadir. El array tras borrar un elemento se reordenara automáticamente puesto q rellena los huecos (no se si lo hace tasker solo o lo tienes q marcar).
Para ser un inicio con Tasker vaya tela! La verdad es que podrías explicarnos mejor como es exactamente la base de datos, como la estructuras tiene muy buena pinta y puede ser muy didáctico.
Fins demá y benbingut Cace al subforo.
Responder Con Cita
  #6  
Viejo 09/03/14, 10:15:31
Avatar de cace0353
cace0353 cace0353 no está en línea
Usuario muy activo
Mensajes: 504
 
Fecha de registro: may 2010
Localización: Arenys de Mar (B)
Mensajes: 504
Modelo de smartphone: Pixel 8 Pro - 256 Gb.
Versión de ROM: Stock
Versión de Radio: Stock
Tu operador: Jazztel
Mencionado: 11 comentarios
Tagged: 0 hilos
El proyecto parte de perfiles y tareas publicadas en el foro.

En principio, y mediante una escena-menú podia elegir que navegador usar (TomTom o Sygic), arrancar GPS Status o navegar andando hasta la posición que habia memorizado y que estaba en memoria.
Esta posición estaba determinada tanto por las coordenadas (%Lloc) como por la dirección (%Nomlloc), precisión y fuente de los datos (%Precisió y %Orígen) y la hora y fecha de la adquisición (%HoraGPS y %DataGPS). Todo esto tomando de modelo lo que he ido pillando por el foro.
Luego se me ocurrió que podria guardar estos datos en un archivo de texto. Como? Lo resolví (siguiendo vuestros tutoriales de matrices de variables) encadenando estos datos separados por ; y escribiéndolos en un archivo (Punts.txt) acabando cada línea con un !
Para recuperar estos dados los cargo en una matriz %Punts (todo el archivo de golpe, claro) y utilizo Separar Variable por ! para obtener las hijas de %Punts (%Punts1 %Punts2 %Punts3...) que contienen, cada una, los parámetros de un punto (%Lloc;%Nomlloc;%Precisió;etc) separados por ;
Si me interesa extraer y mostrar en pantalla p.e. el punto nº 4, cargo la cadena %Punts4 en una nueva matriz %Puntriat de la que, usando el separador ; puedo extraer sus hijas: %Puntriat1 (que es %Lloc) %Puntriat2 (que es %Nomlloc) etc. El índice (%Indexpunts), que en este caso seria el 4, lo elijo mediante las flechas de desplazamiento. El número de puntos total es %Nombre_Punt que he obtenido preciamente con %Punts(#)....
Lo que me ha dado más trabajo (y en lo que he aprendido más ) ha sido el control de las escenas ja que estan superpuestas (el fondo és una y la ventana de datos otra) y hay que ir mostrando y matando...

Al final funciona todo MENOS la opción de borrar un punto intermedio.

Lo habia probado borrando todo el archivo de datos y luego limpiando la matriz %Punts(indice-a-borrar) Luego vuelvo a escribir todas la matrices hijas con un bucle FOR al archivo. Borrar el archivo si que funciona! pero me siguen apareciendo TODOS los puntos y no se me escriben los datos! Seguro que la ca--o en algo que se me escapa!

Me queda hacer la tarea de nuevo escribiendo en el archivo SIN marcar añadir como sugiere mslir. Cuando tenga un rato tranquilo lo hago. En realidad no es una tarea sino que es un conjunto de acciones al hacer "clic largo" sobre el botón. El "clic" muestra un aviso de lo que se va a hacer...

Bueno, me quedan muchas más cosas por hacer. La más interesante es que pudiera asociar estos puntos a Contactos que tengo guardados. Así, si voy a casa de alguien, guardo el punto y lo podria escribir en el registro de este contacto. Luego quedaria el contacto ubicado y usaria la opción de los navegadores offline "Navegar a cointacto". Por cierto: alguien sabe en que archivo se guardan los contactos de Google en el teléfono?

Gracias de nuevo por vuestro interés y ayuda.
Responder Con Cita
  #7  
Viejo 09/03/14, 17:01:14
Avatar de mlesir
mlesir mlesir no está en línea
Usuario muy activo
Mensajes: 2,263
 
Fecha de registro: abr 2012
Mensajes: 2,263
Modelo de smartphone: OnePlus One,BQ Edison1, GoogleChrome,
Versión de ROM: 4.4 Cyanogen
Tu operador: Pepephone
Mencionado: 36 comentarios
Tagged: 2 hilos
No tienes por que cargar todo en %Punto. Puedes usar la acción leer archivo eligiendo la línea que quieres.
Tampoco creo que tengas que usar el separador "!". Deja las líneas sin ese separador después para separar las líneas puedes usar en el campo separador un intro o enter. De esta manera le dices que te los separe por salto de línea. Verás que en el separador NO PUEDES METER INTRO. Pues copia esto de cualquier lado:
"
"
Sin las comillas y lo pegas en el campo separador.
Ahora que por fin entre do tu base te explico como borrar %Punts4 de punts. txt :
Del array punts con la acción array pop borras punt4. De esa manera punt 5 será ahora el 4,el 5 será el 6,etc.
Luego no hace falta borrar punts. txt simplemente escribes en el archivo SIN MARCAR AÑADIR pero MARCANDO NUEVA LÍNEA. Esto lo haces mediante un FOR. En items del for le pones %Punts( o sea para todos los valores que tiene %Punts.
Así vas escribiendo otra vez todas las líneas.
Creo que no me dejo nada.
Responder Con Cita
  #8  
Viejo 09/03/14, 23:49:44
Avatar de cace0353
cace0353 cace0353 no está en línea
Usuario muy activo
Mensajes: 504
 
Fecha de registro: may 2010
Localización: Arenys de Mar (B)
Mensajes: 504
Modelo de smartphone: Pixel 8 Pro - 256 Gb.
Versión de ROM: Stock
Versión de Radio: Stock
Tu operador: Jazztel
Mencionado: 11 comentarios
Tagged: 0 hilos
Bueno ya casi está.

Siguiendo el consejo de mlesir ya he conseguido eliminar la linea que elija y que se guarde en el archivo Punts.txt
El código ha quedado así:

Task: Esborrar Punt (40)
A1: Destruir Escena [ Nombre:SCRresultats ]
A2: Flash [ Texto:Esborrant dades punt %Indexpunts… Largo:Apagado ]
A3: Array Pop [ Variable:%Punts Posición:%Indexpunts A la variable: ]
A4: Eliminar archivo [ Archivo:Punts-GPS/Punts.txt Nivel de Borrado:1 Usar Root:Apagado ]
A5: For [ Variable:%Punts Ítems:%Punts( ]
A6: Escribir archivo [ Archivo:Punts-GPS/Punts.txt Texto:%Punts() Añadir:Apagado Añadir Nueva Línea:Encendido Continuar Tarea Tras Error:Encendido ]
A7: End For
A8: Realizar tarea [ Nombre:Recuperar Punts Parar:Apagado Prioridad:5 Parámetro 1 (%par1): Parámetro 2 (%par2): Devolver Valor de Variable: ]
A9: Mostrar Escena [ Nombre:Menu Aparcament Mostrar como:Actividad, Pantalla Completa, Sin Título Posición Horizontal:100 Posición Vertical:100 Animación:Sistema Mostrar Botón Salida:Apagado Continuar tarea inmediatamente:Encendido ]
A10: Mostrar Escena [ Nombre:SCRresultats Mostrar como:Capa Superpuesta Posición Horizontal:100 Posición Vertical:100 Animación:Sistema Mostrar Botón Salida:Apagado Continuar tarea inmediatamente:Encendido ]


Lo que queda por resolver es que al final de cada linea se ha perdido el separador que le ponia "!" y se ha añadido una "," Esto tiene sentido pues al crear las matrices hijas las ha separado por comas y al final también ha puesto una. Tendré que documentarme en los tutoriales para substituir la "," final por un "!" para poder ver los puntos (estan en el archivo realmente pero la tarea no puede extraer los datos ya que ha desaparecido el separador "!")

¿Alguien puede echarme una mano para que antes de guardar cada linea substituir la , por un !

PD para mlesir: no he conseguido que funcionara con un CR (salto de linea). He tenido que borrar el archivo porque sino se me doblaban los puntos. En cambio lo de usar ( y poner Añadir:apagado ha sido vaselina...

Sigo en la brecha...
Responder Con Cita
  #9  
Viejo 10/03/14, 02:29:07
Avatar de Caravantes
Caravantes Caravantes no está en línea
Usuario muy activo
Mensajes: 2,200
Compra y venta: (1)
 
Fecha de registro: feb 2011
Mensajes: 2,200
Modelo de smartphone: Samsung Galaxy S9
Versión de ROM: Android 8
Tu operador: Lowi
Mencionado: 59 comentarios
Tagged: 4 hilos
Cita:
Originalmente Escrito por cace0353 Ver Mensaje
Bueno ya casi está.
Te comento varias cosas. Cuando lees el archivo, lo metes en una variable %Punts (que llamaré variable-general) y luego lo divides en variables-hijas %Punts1, %Punts2, etc.
Pues luego resulta que para grabar esas variables hijas utilizas un bucle FOR y a dicho bucle le asignas una variable cuyo nombre COINCIDE con el de la variable general.

A5: For [ Variable:%Punts Ítems:%Punts( ]

Esos solapamientos en los nombres de dos variables pueden dar malos resultados: En el bucle FOR estás grabando cada variable hija y la acción FOR le pasa el valor de la variable hija a una variable %Punts que se llama igual que la variable-general (¿que a su vez engloba la variable hija?). Supongo que ves el problema recursivo, del cual te has librado por los pelos. Casi te haces un auto-sabotaje por usar el mismo nombre para dos variables.

Yo creo que el esquema siguiente es una buena solución para grabar esas variables en un archivo:

1- %index = 1
2- Escribir archivo [ Archivo:Punts-GPS/Punts.txt Texto:%Punts(%index) Añadir:Apagado Añadir Nueva Línea:Encendido Continuar Tarea Tras Error:Encendido ]
3- GrabaOtroElemento (etiqueta)
4- Sumar a %index, 1
5- Escribir archivo [ Archivo:Punts-GPS/Punts.txt Texto:!%Punts(%index) Añadir:Encendido Añadir Nueva Línea:Encendido Continuar Tarea Tras Error:Encendido ] Si(If) %Punts(#) > 1
6- Ir a GrabaOtroElemento Si(If) %index<%Punts(#)
La acción 2 graba el primer elemento, y la acción 5 graba el resto de elementos mediante un bucle.

Puedes ver que en la acción 2 he desmarcado la casilla AÑADIR. De esta forma, nos ahorramos la acción anterior ELIMINAR ARCHIVO, puesto que al ESCRIBIR el primer elemento sin AÑADIR ya sobreescribe el archivo, borrando todo lo que contuviera anteriormente. Sin embargo, en la acción 5 sí he marcado la casilla AÑADIR para que los sucesivos elementos (segundo y siguientes) se añadan tras el primero sin sobreescribirlo.

En la acción 5 te he resaltado en rojo el carácter de admiración, que se graba precediendo a cada elemento (segundo y siguientes) de la matriz. De esta forma consigues tener una admiración entre los elementos, para que en ocasiones futuras puedas leer el archivo y dividir la variable con las admiraciones.

Debes valorar si te interesa mantener activado lo de AÑADIR NUEVA LÍNEA. El fichero queda mucho más legible porque cada elemento queda en una línea nueva del fichero, pero el problema viene luego. Cuando Tasker lea ese fichero y lo meta en una variable y luego divida la variable utilizando la admiración... en las variables hijas habrá (al final de cada una) un cambio de línea. Supongo que eso te estorba en la variable hija. Pues tienes dos formas de eliminarlo. La primera es como te he dicho, quitando la marca de AÑADIR NUEVA LÍNEA cuando grabas. El fichero queda menos legile (para un humano) porque va todo en una sola línea, vaya follón.

La otra opción es mejor: después de leer el fichero y copiarlo a una variable, añades una acción BUSCAR Y REEMPLAZAR que busque en la variable general los cambios de línea y los reemplace por... nada. Así los cambios de línea desaparecen de la variable general. Tras eso ya puedes hacer la división utilizando las admiraciones. Para esto surge un problema: en la acción BUSCAR Y REEMPLAZAR ¿cómo le digo que busque el cambio de línea? El código \n (una barra invertida y una ene minúscula) sirve para representar un cambio de línea. Más información sobre cambios de línea en el siguiente dialogo: http://www.htcmania.com/showthread.php?t=778912

Creo que con esto he respondido también a tus dos últimas preguntas: cómo substituir la , por un ! (acción BUSCAR Y REEMPLAZAR), y también lo de los saltos de línea.

Si te fijas, el esquema que he propuesto sirve para cuando la matriz tiene cualquier número de elementos, siempre que haya al menos uno. Pero también deberías de contemplar la posibilidad de haber borrado TODOS los elementos. ¿Qué vas a grabar en ese caso? Creo que al menos hay que borrar el archivo o grabar un archivo vacío, pero eso ya depende de cómo tengas el resto de tareas: ¿qué pasa cuando abres la app y no hay archivo alguno o hay un archivo vacío?

Último apunte: deberías replantearte cuáles variables son globales (tienen alguna letra mayúscula en su nombre) y cuales son locales (sin ninguna letra mayúscula en su nombre). Estás usando variables globales que creo que son innecesarias.

Última edición por Caravantes Día 10/03/14 a las 02:32:48
Responder Con Cita
  #10  
Viejo 10/03/14, 10:35:44
Avatar de cace0353
cace0353 cace0353 no está en línea
Usuario muy activo
Mensajes: 504
 
Fecha de registro: may 2010
Localización: Arenys de Mar (B)
Mensajes: 504
Modelo de smartphone: Pixel 8 Pro - 256 Gb.
Versión de ROM: Stock
Versión de Radio: Stock
Tu operador: Jazztel
Mencionado: 11 comentarios
Tagged: 0 hilos
Bueno Caravantes, recojo y aprecio tus sugerencias.

Creo, sin embargo, que si sustituyo el bucle FOR por el codigo que sugieres usando el GOTO Etiqueta ocurrirá que el último elemento añadido no acabará en ! y, cuando cargue el archivo, no se añadirá a la matriz %Punts

Lo de buscar y reemplazar la , por ! tampoco puedo usarlo ya que en cada elemento de la matriz contiene la direccion, coordenadas, precision, orígen, fecha y hora. La dirección del lugar me la ha devuelto un HTTP get a Google Maps que usa "," para separar numero de calle, ciudad... tambien las dos coordenadas vienen separadas por comas...
Voy a probar de poner como ultimo dato de cada linea la fecha y entonces un Buscar y Reemplazar "2014," por "2014!". Para evitar tener que revisar el código cada año a lo mejor utilizo los 4 últimos caracteres de la variable %DATE así "20**," por "20**!" y sanseacabó.

Por lo que respecta a escribir los datos en el archivo sin salto de linea lo hago para poder consultar la lista de los puntos almacenados (boton inferior derecha del pantallazo) ejectutando la aplicación ESexplorer y abriendo el archivo Punts.txt.

Lo de usar en el bucle FOR la variable %Punts se debe a un desconocimiento de cuales son los parámetros de la acción. ¿Podria usar p.e. una variable %temporal para recoger estos valores y escribirlos en Punts.txt?
Quedaria así:

A5: For [ Variable:%temporal Ítems:%Punts( ]
A55: Buscar y reemplazar [ variable %temporal Texto: 20**, reemplazar por: 20**! ] (añadido a mano)
A6: Escribir archivo [ Archivo:Punts-GPS/Punts.txt Texto:%temporal Añadir:Apagado Añadir Nueva Línea:Encendido Continuar Tarea Tras Error:Encendido ]
A7: End For


Desde luego queda más limpio, pero ¿la sintaxis que propongo os parece adecuada?

Gracias de antemano

EDITO: No va lo de substituir %Punts por %temporal. Seguramente no tengo bien entendidos cuales són los parámetros de la acción FOR. Yo creia que %temporal era la variable que, para cada ciclo del FOR, almacenaba el contenido de cada %Punts, y entonces substituia dentro de la cadena 2014, por 2014! y lo escribia al archivo Punts.txt. Pero NO se escribe nada.
Usando como tenia %Punts con buscar 2014, y reemplazar con 2014! sigue escribiendo 2014,
Tambien he visto que no usaba bien el 20** Deberia haber escrito 20.* De todas formas primero he de intentar resolverlo para este año 2014! El año que viene está lejos...

Última edición por cace0353 Día 10/03/14 a las 11:53:45
Responder Con Cita
  #11  
Viejo 10/03/14, 23:43:34
Avatar de Caravantes
Caravantes Caravantes no está en línea
Usuario muy activo
Mensajes: 2,200
Compra y venta: (1)
 
Fecha de registro: feb 2011
Mensajes: 2,200
Modelo de smartphone: Samsung Galaxy S9
Versión de ROM: Android 8
Tu operador: Lowi
Mencionado: 59 comentarios
Tagged: 4 hilos
Cita:
Originalmente Escrito por cace0353 Ver Mensaje
si sustituyo el bucle FOR por el codigo que sugieres usando el GOTO Etiqueta ocurrirá que el último elemento añadido no acabará en ! y, cuando cargue el archivo, no se añadirá a la matriz %Punts
No, eso no es como dices. Mi código está bien.
Partimos de que tienes una variable general y utilizas la acción DIVIDIR VARIABLBE para generar la matriz, utilizando como separador la admiración. Debes entender que la acción DIVIDIR VARIABLE genera un número de elementos que siempre es igual al número de admiraciones MAS UNO. Por ejemplo, en la secuencia "Alfa!Beta!Landa" hay DOS admiraciones y la acción DIVIDIR VARIABLBE generaría una matriz de TRES elementos, que son: Alfa, Beta y Landa. Es por eso que al grabar el archivo tienes que poner una admiración menos que el número de elementos a grabar, y hay dos formas de hacerlo:
A) Poniendo una admiración tras cada elemento, excepto el último.
B) Poniendo una admiración antes de cada elemento, excepto el primero.
Para ambas opciones, lo más facil es poner la admiración en la acción ESCRIBIR ARCHIVO, junto al nombre de la variable, ya sea justo antes o justo después. Ya te mostré cómo se hace.
Yo elegí la segunda opción (B) porque además me permitía diferenciar la grabación del primer elemento, haciendo que esa grabación borrase el contenido previo del archivo.

Si quieres grabar una admiración TRAS cada elemento de la matriz, puedes hacerlo de forma parecida a como te he explicado: En la acción ESCRIBIR ARCHIVO solo tienes que añadir una admiración tras la variable-elemento que estás grabando.

Cita:
Originalmente Escrito por cace0353 Ver Mensaje
Para evitar tener que revisar el código cada año a lo mejor utilizo los 4 últimos caracteres de la variable %DATE así "20**," por "20**!" y sanseacabó.
Eso no funcionará como esperas. Un asterisco equivale a "cualquier carácter o conjunto de caracteres (incluyendo el conjunto vacío)". Y eso significa que poner dos asteriscos juntos siempre es una gran tontería: dos asteriscos funcionan igual que un solo asterisco. Además, te va a ocurrir que no solo hará la sustitución al final del elemento, como pretendes: si alguna dirección incluye los caracteres "20" (por ejemplo en el número de la calle) también intentará insertar ahí una admiración.

Pero como luego has comprobado, Tasker no puede ejecutar esa sustitución. Le puedes pedir que sustituya "20*" por cualquier otra cosa, pero en esa otra cosa no puede haber asteriscos, por definición.

Cita:
Originalmente Escrito por cace0353 Ver Mensaje
A55: Buscar y reemplazar [ variable %temporal Texto: 20**, reemplazar por: 20**! ] (añadido a mano)
Estás intentnado decirle a Tasker lo siguiente: en la variable %temporal busca el texto "20" seguido de cualquier cosa, y sustituyelo por "20" seguido de cualquier (otra) cosa y seguido de una admiración. No funciona porque Tasker no es capaz de inventarse "cualquier (otra) cosa" para ponerla entre el "20" y la admiración. Es por eso que la acción BUSCAR Y REEMPLAZAR no admite asteriscos en la casilla de REEMPLAZAR.

Respecto al nombre de la variable FOR, creo que la idea la tienes bien cogida. Si no te funciona seguramente sea por otro tipo de detalles, hay muchos otros detalles implicados.

De toda la conversación saco las siguientes conclusiones generales; son impresiones mías totalmente subjetivas y te las transmito a modo de sugerencia porque supongo que tal vez puedan servirte para organizar tus tareas y actividades con Tasker:

1- Tienes una muy buena capacidad para idear aplicaciones y en líneas generales entiendes muy bien el funcionamiento de Tasker (y en lineas generales entiendes muy bien los principios de la programación informática). O sea que tienes una mente muy adecuada para esto del Tasker, y eso también te convierte en un individuo muy valioso para esta comunidad, donde necesitamos personas imaginativas como tú.

2- Te faltan conocimientos básicos elementales, tales como los conceptos de variable, nombre de variable, significado de un asterisco, y otras muchas cosas similares. La carencia de esos conocimientos básicos te ocasiona tropiezos contínuos. Creo que te iría mucho mejor si te tomaras algo de tiempo para leer la guía "Tasker para principiantes" http://www.htcmania.com/showthread.php?t=614108

3- Tienes mucho desparpajo y confianza en tí mismo, lo que tiene su lado bueno y su lado menos bueno. Está bien que te atrevas a iniciar una app como la que has diseñado, e incluso me parece fantástico que te atrevas a contradecirme, pero si careces de los conocimientos básicos y por culpa de eso no me entiendes (o me contradices sin tener base suficiente), entonces entramos en otro nivel de problema que no me entusiasma en absoluto. Algunos veteranos nos hemos tomado la molestia de traducir la guía "Tasker para principiantes" y ese esfuerzo pretende que no tengamos que explicar una y otra vez esas cuestiones básicas a cada compañero que está comenzando con Tasker.

No estoy enfadado en absoluto. Solo te estoy explicando que seguiré esforzándome en tratar de ayudarte si tú también te esfuerzas en tu parte (punto 2).
Responder Con Cita
  #12  
Viejo 11/03/14, 10:43:29
Avatar de cace0353
cace0353 cace0353 no está en línea
Usuario muy activo
Mensajes: 504
 
Fecha de registro: may 2010
Localización: Arenys de Mar (B)
Mensajes: 504
Modelo de smartphone: Pixel 8 Pro - 256 Gb.
Versión de ROM: Stock
Versión de Radio: Stock
Tu operador: Jazztel
Mencionado: 11 comentarios
Tagged: 0 hilos
Hola Caravantes,

Antes que nada te pido disculpas por mi actitud. Está claro que desmonté de forma un poco soberbia tu aportación basándome en "conocimientos" que yo tenia por buenos y que en parte, evidentemente, no lo eran:

- Lo de que el separador genera tantas hijas como nº de separadores más uno, a pesar de que lo habia leido, no lo tuve presente. En realidad, al hacer la lectura de los datos del fichero siempre tenia una matriz hija de más pero que estaba VACIA. En la ventana de resultados me aparecia un %Punt de más que me mostraba como valor el nombre de la variable.... Esto lo resolví con una chapuza: restando 1 a la variable que contenia el nº total de puntos guardados y así sólo se me mostraban los n-1 primeros puntos (ya que el punto n estaba vacio).
- El bucle FOR. Al final funcionó. Reescribí el código usando la variable %temporal (en lugar del nombre de la matriz %Punts) y FUNCIONA! Añadí también un Array Pop para que no grabara las lineas en blanco que me salian. Sigo sin tener claros los conceptos de Escribir archivo: Añadir y Añadir nueva linea. Sin embargo, al cambiar a %temporal el nombre que recoge cada %Punto en el bucle ya no me aparecen las "," finales.
Pongo el código completo de esta tarea por si a alguien le interesa aprovecharla:

Task: Esborrar Punt (40)
A1: Destruir Escena [ Nombre:SCRresultats ]
A2: Flash [ Texto:Esborrant dades punt %Indexpunts… Largo:Apagado ]
A3: Array Pop [ Variable:%Punts Posición:%Indexpunts A la variable: ]
A4: Eliminar archivo [ Archivo:Punts-GPS/Punts.txt Nivel de Borrado:1 Usar Root:Apagado ]
A5: For [ Variable:%temporal Ítems:%Punts( ]
A6: Escribir archivo [ Archivo:Punts-GPS/Punts.txt Texto:%temporal! Añadir:Encendido Añadir Nueva Línea:Apagado Continuar Tarea Tras Error:Encendido ] Si (if) [ %temporal ~ ++ ]
A7: End For
A8: Realizar tarea [ Nombre:Recuperar Punts Parar:Apagado Prioridad:5 Parámetro 1 (%par1): Parámetro 2 (%par2): Devolver Valor de Variable: ]
A9: Mostrar Escena [ Nombre:Menu Aparcament Mostrar como:Actividad, Pantalla Completa, Sin Título Posición Horizontal:100 Posición Vertical:100 Animación:Sistema Mostrar Botón Salida:Apagado Continuar tarea inmediatamente:Encendido ]
A10: Mostrar Escena [ Nombre:SCRresultats Mostrar como:Capa Superpuesta Posición Horizontal:100 Posición Vertical:100 Animación:Sistema Mostrar Botón Salida:Apagado Continuar tarea inmediatamente:Encendido ]

- Desde una visión de conjunto he cometido varios errores (y no es la primera vez que me ocurre):

1º No existe un Proyecto de programa cuyas lineas desarrolle. Más bién empecé transcribiendo tareas que vi en el foro (guardar-sitio, nombre-sitio, buscar-coche, ...) y perfiles para montar un proyecto (en minúsculas) con varias escenas que, por esa imaginación desbordada que has detectado, ha ido creciendo a base de cuestiones que me surgen: ¿Y porqué no hago ahora que ...? ¿Y ahora que tengo el punto no lo guardo en un archivo para recuperarlo? ¿Y como puedo borrar un punto almacenado? ¿Y porqué no pongo un botón para visualizar cada punto en Google Maps?, etc. etc.

2º Esta falta de estructura planificada y de algunos conocimientos básicos me hace resolver los problemas a veces con chapuzas. Pero, desde luego (tienes que reconocerlo), se aprende más resolviendo un problema y buscando la información para resolverlo que empollando tutoriales. En el fondo es como lo hacen los niños cuando les pones a manos un teclado y una pantalla...

3º Lo de poder ver el contenido del archivo Punts.txt de datos desde ES Explorer era porqué probé el elemento Rueda en una escena (aparece una ventana desplegable con el primer elemento de la matriz) y, al desplegarla se me iban corriendo las líneas. De nuevo he de reconocer otra terquedad mia: si uso el bucle GOTO para escribir los puntos en el archivo y SIN salto de linea como sugieres, creo que podré utilizar el elemento Rueda en la escena para recuperarlos desde la misma aplicacion!

Por eso creo que dejaré la .apk de momento tal como está para utilizarla y me dedicaré a depurar y reescribir el código incorporando estas nuevas maneras de hacer.

Desde luego que seguiré incordiando: ¿Que archivo contiene la base de datos de Contactos? ¿Como lo haré para editar el nombre del punto antes de guardarlo (p.e. "Bar Pepe de tal-sitio" en lugar de "carrer XXX, 5 08100 Barcelona")?

PD: Caravantes, tienes un MP

Última edición por cace0353 Día 11/03/14 a las 11:50:27
Responder Con Cita
  #13  
Viejo 13/03/14, 05:09:29
Avatar de Caravantes
Caravantes Caravantes no está en línea
Usuario muy activo
Mensajes: 2,200
Compra y venta: (1)
 
Fecha de registro: feb 2011
Mensajes: 2,200
Modelo de smartphone: Samsung Galaxy S9
Versión de ROM: Android 8
Tu operador: Lowi
Mencionado: 59 comentarios
Tagged: 4 hilos
Aclaro públicamente que Cace0353 y yo hemos tenido una breve conversación telefónica para conocernos un poco y entendernos mejor. Creo que ha estado bien.

Cita:
Originalmente Escrito por cace0353 Ver Mensaje
2º Esta falta de estructura planificada y de algunos conocimientos básicos me hace resolver los problemas a veces con chapuzas. Pero, desde luego (tienes que reconocerlo), se aprende más resolviendo un problema y buscando la información para resolverlo que empollando tutoriales. En el fondo es como lo hacen los niños cuando les pones a manos un teclado y una pantalla...
No creo que haya un método mejor que otro, lo que pasa es que hay unas personas más "imaginativas e impulsivas" y otras más sistemáticas; cada una tiene sus ventajas y cada una lleva consigo su propia limitación a modo de penitencia. La cuestión es que -con esfuerzo de ambas partes- es posible colaborar superando las diferencias y en algunos casos el resultado es excelente.

La tarea que has publicado aquí solo es la punta del iceberg. Nos gustaría ver el proyecto completo, cuando tengas tiempo. Y si necesitas más ayuda, pues vuelves a preguntar.

Ya te anticipo una idea interesante: si mantienes los datos en variables globales (con nombres de variables que tienen alguna letra en mayúscula), no necesitas grabar ningún archivo de texto, porque la información de esas variables no se pierde al finalizar la tarea ni tampoco al apagar el smartphone.

Te hago una petición final: cambia el título del primer post en este hilo (edición, edición avanzada). "Eliminar linea n de un archivo de datos" me parece que da una idea equivocada sobre el contenido. Sería mucho mejor algo como "Quitar un elemento de una matriz y grabar el resto en un fichero de texto".
Responder Con Cita
  #14  
Viejo 13/03/14, 11:12:19
Avatar de cace0353
cace0353 cace0353 no está en línea
Usuario muy activo
Mensajes: 504
 
Fecha de registro: may 2010
Localización: Arenys de Mar (B)
Mensajes: 504
Modelo de smartphone: Pixel 8 Pro - 256 Gb.
Versión de ROM: Stock
Versión de Radio: Stock
Tu operador: Jazztel
Mencionado: 11 comentarios
Tagged: 0 hilos
Cita:
Originalmente Escrito por Caravantes Ver Mensaje
La tarea que has publicado aquí solo es la punta del iceberg. Nos gustaría ver el proyecto completo, cuando tengas tiempo. Y si necesitas más ayuda, pues vuelves a preguntar. Ya te anticipo una idea interesante: si mantienes los datos en variables globales (con nombres de variables que tienen alguna letra en mayúscula), no necesitas grabar ningún archivo de texto, porque la información de esas variables no se pierde al finalizar la tarea ni tampoco al apagar el smartphone.
Respecto a lo 1º que me apuntas. La versión que tengo ahora funciona decentemente convertida en APK para 1920x1080. La versión en XML no acaba de ir fina...(no es la misma que convertí a .APK) ya que la que recuperé de los autobackup no és la misma después de tantos cambios. Entre otras cosas, és por esto que quiero reescribir todo el Proyecto de nuevo (ahora sí, con mayúsculas) desmenuzando los diferentes procesos en más tareas separadas. Ten en cuenta que ahora tengo varios procesos con llamadas a otras tareas que se activan con un "clic" en un boton de una escena. Así me ha ido...
Respecto a lo 2º que me comentas de las variables globales, ya lo pude comprobar al borrar todo el archivo de datos (Punts.txt) para ver que ocurria si no habia puntos guardados ni archivo. Al abrir la APK: ¡estaban todos! Interpreté que era porque las variables quedaban en RAM. Sin embargo, y eso si que me extraña, si haces un reinicio de software o apagas el teléfono se mantienen..., és como si las variables globales del programa se escribieran en algún archivo de sistema de Android. Seguiré investigando.

Este es el que tengo "con problemillas": https://dl.dropboxusercontent.com/u/...backup.xml.txt
Responder Con Cita
  #15  
Viejo 13/03/14, 11:16:19
Avatar de jcmogar
jcmogar jcmogar no está en línea
Usuario muy activo
Mensajes: 536
 
Fecha de registro: ago 2008
Localización: Barcelona
Mensajes: 536
Modelo de smartphone: BQ E5 HD
Versión de ROM: 1.3.1
Tu operador: Pepephone
Mencionado: 2 comentarios
Tagged: 0 hilos
Las variables globales se almacenan como datos. Desaparecen si le das a Borrar datos en Ajustes/Aplicaciones/nombre_aplicación.
Responder Con Cita
Gracias de parte de:
  #16  
Viejo 13/03/14, 14:44:22
Avatar de mlesir
mlesir mlesir no está en línea
Usuario muy activo
Mensajes: 2,263
 
Fecha de registro: abr 2012
Mensajes: 2,263
Modelo de smartphone: OnePlus One,BQ Edison1, GoogleChrome,
Versión de ROM: 4.4 Cyanogen
Tu operador: Pepephone
Mencionado: 36 comentarios
Tagged: 2 hilos
Hola Cace. Veo que el hilo ha dado para mucho. No he tenido tiempo de seguirlo en profundidad, creo que ya te funciona y te hace lo que quieres pero si vas a complicar más las bases de datos igual deberías pensar en la opción de crear y manejar una base de sql3.
Sobre los archivos que contienen los Cóntactos: /data/data/com.android.providers.contacts Por ahí veras un montón de bases de datos de...sorpresa.. Sql3! Eso sí, son un follon de bases! Tienes el plugin Autocontact en el recopilatorio q igual te puede ayudar.
Responder Con Cita
  #17  
Viejo 13/03/14, 17:25:42
Avatar de cace0353
cace0353 cace0353 no está en línea
Usuario muy activo
Mensajes: 504
 
Fecha de registro: may 2010
Localización: Arenys de Mar (B)
Mensajes: 504
Modelo de smartphone: Pixel 8 Pro - 256 Gb.
Versión de ROM: Stock
Versión de Radio: Stock
Tu operador: Jazztel
Mencionado: 11 comentarios
Tagged: 0 hilos
Hola mlesir,
Gracias por tu apunte. Lo tendré en cuenta para más adelante porque no conozco como se manejan las base en sql3.
De momento no voy a empezar nada nuevo cuando lo que tengo entre manos no lo he dado por terminado: voy a crear el Proyecto de 0 a partir de esta idea base, con una estructura clara de que quiero conseguir, que partes lo integraran con funciones específicas para cada una y como voy a gestionar estas partes desde un entorno. No pienso que pueda ser un programa de mucho interés general (hay programas específicos que lo hacen mejor...), mas bién lo veo como una manera de "aprender jugando". Me gusta programar, aunque no me dedico a ello, y me llena de satisfacción ver como las cosas van saliendo..., y a cada meta conseguida se me abren nuevos horizontes. No tengo remedio!
A pesar de todo lo que he removido con este hilo al final creo que voy a hacerlo sin escribir el archivo (Caravantes y jcmogar sugieren trabajar con las variables globales que se almacenan en el propio sistema) ya que se simplifica todo y, sobre todo, el programa es más eficiente.
Lo que si que voy a trastear serà la base de datos de contactos.
Cuando lo tenga todo rehecho voy a postear el trabajo final para compartirlo.
Gracia de nuevo a todos por el interés en resolver dudas. Este foro es la repera!
Responder Con Cita
Respuesta

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


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

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

Saltar a Foro



Hora actual: 16:59:09 (GMT +2)

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