Este documento explica el uso de matrices en Tasker. Las matrices permiten almacenar y manipular listas de variables de forma estructurada. Se pueden crear matrices usando la acción Separar Variable o agregando elementos individualmente. Las matrices permiten referirse a sus elementos de varias formas, como por su índice o contenido. También se pueden usar bucles For para iterar sobre los elementos de una matriz. El documento proporciona un ejemplo de cómo rediseñar una lista TODO usando matrices.
Este documento explica el uso de matrices en Tasker. Las matrices permiten almacenar y manipular listas de variables de forma estructurada. Se pueden crear matrices usando la acción Separar Variable o agregando elementos individualmente. Las matrices permiten referirse a sus elementos de varias formas, como por su índice o contenido. También se pueden usar bucles For para iterar sobre los elementos de una matriz. El documento proporciona un ejemplo de cómo rediseñar una lista TODO usando matrices.
Este documento explica el uso de matrices en Tasker. Las matrices permiten almacenar y manipular listas de variables de forma estructurada. Se pueden crear matrices usando la acción Separar Variable o agregando elementos individualmente. Las matrices permiten referirse a sus elementos de varias formas, como por su índice o contenido. También se pueden usar bucles For para iterar sobre los elementos de una matriz. El documento proporciona un ejemplo de cómo rediseñar una lista TODO usando matrices.
variables 701part-7-608x338.jpg En la leccin 5 de esta gua (http://www.htcmania.com/ showthread.php?p=8821039) mencion brevemente las matrices. En ese momento no era oportuno entrar en muchos detalles, pero ahora es el momento de explorar a fondo estas variables de Tasker. Qu es una matriz? Las matrices son comunes en muchas reas, desde las matemticas a la programacin. En Tasker, una matriz puede ser descrita como una variable de base que tiene varias variables hijas. Cuando se utiliza Separar-variable sobre la variable %Hola, obtienes un montn de variables hijo %Hola1, %Hola2, %Hola3, etc. %Hola es entonces una matriz con varios elementos, y cada elemento es una variable en s misma. Hasta aqu nada nuevo, quizs con la excepcin de la terminologa, porque ya hemos estado utilizando variables hijo a lo largo de la gua. Cada elemento de una matriz es una variable, por lo que puede ser utilizado como una variable independiente, que es la forma en que hemos estado utilizando matrices anteriormente. Pero lo que hace especial a las matrices son algunas cosas que se pueden hacer nicamente con ellas, adems de todo lo que se puede hacer con cualquier variable. Dado que las variables de una matriz estn dispuestas en una forma que pueden ser fcilmente referenciadas, ahora tenemos un nuevo conjunto de herramientas que podemos utilizar para manipular las variables a nivel de matriz, en lugar de tratarlas como simples variables individuales. Para utilizar matrices, hay que abandonar el concepto de variables como entidades nicas. Cuando se hace referencia a una matriz, es comn referirse a ella de dos formas: por su variable de base (como %Hola) o en el formato %Hola(). El primer mtodo es usado para configurar acciones especficas en Tasker, algunas de las cuales veremos ms adelante. Por otro lado, %Hola() incluye los contenidos de cada variable de la matriz, separados por una coma. Si tenemos la variable %ingredientes = azucar.leche.harina y le aplicamos la accin Separar-variable usando el punto como separador, obtenedremos una variable matriz %ingredientes que contiene %ingredientes1 = azucar %ingredientes2 = leche %ingredientes3 = harina En este momento, usar una accin Flash para ver %ingredientes nos mostrar azucar.leche.harina, con puntos intermedios como al principio. Pero una accin Flash sobre %ingredientes() mostrar el valor de cada variable hija, separndolas con una coma, por lo que vers azcar,leche,harina. Si se borra la variable %ingredientes y luego se repiten ambas acciones Flash, se obtendra un %ingredientes vaco en la primera, y el mismo resultado azcar,leche,harina en la segunda. Esto se debe a que la matriz se mantiene a pesar de que se borre la variable que se us para crear la matriz. Por el contrario, si se borran las variables de la matriz %ingredientes, la primera accin Flash no se vera afectada, mientras que la segunda solo mostrara variables vacas. Esto resulta confuso, porque %ingredientes puede hacer referencia a la variable individual %ingredientes o a los elementos de la matriz %ingredientes. Cuando manejamos matrices, ste es el error ms comn: hacer referencia a uno cuando te quieres referir a lo otro. Haciendo referencia a las matrices Dado que las matrices numeran listas de variables, esto permite nuevas maneras para referirse a ellas. La lista de estas opciones est disponible en la versin inglesa de la Gua de Usuario, en la seccin Variable Arrays (http://tasker.dinglisch.net/ userguide_summary.html), y voy a citarlas aqu: Si las cuatro variables %matriz1, %matriz2, %matriz3 y %matriz4 contienen respectivamente a, b, c, d,entonces tenemos una matriz con 4 elementos. Estas variables se pueden utilizar como cualquier otra, pero tambin es posible acceder a ellas de manera especial. Veamos algunos ejemplos: %matriz(#) El nmero de elementos de una matriz (4 en este caso). %matriz(#>) El ndice del primer elemento de una matriz definida, o 0 si la matriz no est definida (1 en este caso). %matriz(#<) El ndice del ltimo elemento de una matriz definida, o 0 si la matriz no est definida (4). %matriz(#?b/c) Una lista separada por comas de los ndices de matriz (de menor a mayor) con valores coincidentes con los indicados, o 0 si no coincide ninguno (2,3 en el ejemplo). %matriz(>) El contenido del primer elemento de la matriz (a). %matriz(<) El contenido del ltimo elemento de la matriz (d). %matriz() o tambin %matriz(:) Todos los elementos de la matriz separados por comas (a,b,c,d) %matriz(2) o simplemente %matriz2 El contenido de elemento con el ndice 2 (b) %matriz(2:4) El contenido de los elementos con ndices 2 a 4 (b,c,d) %matriz(:3) Todos los elementos con ndices de hasta 3 (a,b,c) %matriz(3:) Todos los elementos con ndices a partir de 3 (c,d) Un buen observador puede haber reconocido la primera de ellas, %matriz(#). Esto se debe a que la usamos en un ejemplo en la parte 5 de la gua , para contar el nmero de lneas en un archivo de texto. Lo que realmente se hizo fue que se copi el contenido de un archivo de texto a una matriz, haciendo que cada lnea fuese un nuevo elemento de la matriz. El uso de (#) detrs de la variable de base hace que Tasker cuente el nmero de elementos en la matriz, que en aquel caso conicida con el nmero de lneas del texto. Por supuesto, Usted tambin reconoce aqu %matriz(), que es lo mismo de que lo que acabamos de hablar anteriormente. Estos mtodos antes mencionados nos muestran diferentes formas de referirse a las matrices, lo que nos permite, por ejemplo, referirnos al ltimo elemento de una matriz sin saber qu nmero es. Uno de los mtodos que falta aqu (porque no es exclusivo de las matrices) es el formato %matriz(%variable). Asumiendo que tiene una %variable con un valor numrico, puede hacer referencia al elemento de matriz en ese punto de la matriz mediante el uso de este formato. Cmo se crean las matrices En cuanto a la forma de generar las matrices, ya he citado la accin Separar-variable. Voy a citar una vez ms la gua de usuario oficial sobre esto, ya que lo tiene casi clavado: 1. Usando Separar-variable: Establecer-variable %matriz a,b,c,d Separar-variable%matriz , Si alguno de sus datos incluye una coma, se podra usar otro separador menos frecuente como por ejemplo la arroba @, recordando utilizar ese mismo carcter en la accin Separar- variable. 2. Mediante la asignacin de elementos individuales con Establecer-variable: Establecer-variable, %matriz3 c 3. Con Array-push para agregar un elemento inicial. 4. Algunas otras acciones tambin crean matrices en sus resultados, por ejemplo, Listar-archivos. Separar-variable es quizs la forma ms comn de generar matrices, aunque algunas otras acciones, como Listar-Archivos recin mencionada, tambin permite crearlas. Aparte de eso, tambin puede crearlas manualmente con Establecer-variable o con Array-push. Bucles For En Tasker, las acciones For y End-For se encuentran juntas con Si (If), Else y End-If. Al igual que Si(If)/End-If , For/End-For crean un grupo de acciones fcilmente distinguible dentro de la tarea. Inicialmente, esta accin For puede parecer confusa pero pronto te das cuenta de su potencia. Se aplica sobre una variable, con una lista de elementos o tems separados por comas. Todo el conjunto de acciones del grupo se ejecutar una vez para cada elemento de la lista, y en cada ejecucin la variable tendr el valor de ese tem concreto. Por ejemplo: For Variable: %itemaflash, Items: hola, mundo, cmo, ests? Flash: %itemaflash End-For En este caso el grupo solo tiene una accin Flash que se ejecutara una vez por cada elemento de la lista, en este caso 4 veces. Cada vez, la variable %itemaflash se actualizar con el siguiente elemento de la lista, comenzando con un "hola", terminando con "ests?". O sea que aparecen 4 mensajes flash, cada uno con uno de los elementos de la lista. La ventaja de este sistema es que se puede especificar un conjunto de acciones y luego ejecutar un montn de valores a travs de ellas sin necesidad de duplicar las acciones. Se necesita algn tiempo para acostumbrarse con los detalles e implicaciones; por ejemplo, si el grupo incluye alguna accin que grabe un archivo conviene asegurarse de que el nombre del archivo sea nico para cada tem. Ejemplo: lista TODO V2 Nota del traductor: la expresin TODO se refiere a To-Do, que viene a significar por-hacer, pendiente o simplemente lista-de- tareas. 702scene.jpg Recientemente decid rehacer mi sistema lista de tareas TODO (que se describe en la parte tercera de esta gua ) para darle un mejor rendimiento y ms caractersticas. Decid utilizar matrices en su ncleo, y es bastante ms eficaz que el sistema anterior. Tambin he aadido una nueva lista genrica TODO que no activa ninguna alarma, adems de rehacer mis tres listas para situaciones especficas. Voy a mostrar la lista genrica aqu ya que las tres listas concretas aaden un poco de complejidad adicional. El primer sistema de lista TODO que haba creado utilizaba mtodos que no eran ideales. La funcin de agregar a la lista fue hecha guardando un archivo de texto, un archivo que se lea en una sola variable y se mostraba en un campo de texto. La ventaja de esto era que la lista se formateaba para su lectura en el archivo de texto directamente, cada lnea est separada por un cambio de lnea, y as no era necesario utilizar un divisor ms especfico. El nico inconveniente era que la lista entera se convirti en una sola entidad, lo que hace imposible algunas cosas como seleccionar separadamente alguno de los elementos o lneas. La nueva lista se basa en matrices. La lista an se guarda en un archivo de texto, pero el archivo de texto es ms una funcin de copia de seguridad y ya no es el almacenamiento principal de los elementos. Los elementos se almacenan en una matriz global, que es directamente compatible con el archivo escribiendo %Array() al archivo de texto (escribir el valor de cada elemento de la matriz, separados por una coma), y leerlo de nuevo en un variable que luego se divide por la coma (recuperando de nuevo la forma de matriz). De esta forma, la matriz puede ser utilizada como la fuente para un elemento de men de escena. Adems, se pueden aadir elementos fcilmente mediante la accin Men, que rellena automticamente una escena con ese elemento. De esta forma, se puede utilizar un elemento por s solo, y usando una matriz como fuente, se crea una lista en la que cada elemento de la matriz se convierte en un elemento de la lista. Los elementos de la lista pueden ser seleccionados y/o utilizados individualmente, lo que significa que ahora tenemos las herramientas necesarias para hacer que esta lista TODO se parezca un poco ms a una aplicacin bien afinada. Tarea de activacin 703launchtask.jpg La tarea de disparo es bastante sencilla. Se parece a esto: Leer-archivo, Archivo:gentodo.txt a Variable:%Gentodo (lee el archivo de texto de mi lista GENrica TODO en una variable) Separar-variable %Gentodo, Separador:, Establecer-variable %Gtselectedd a 0 (restablece una variable utilizada ms tarde. La doble D final no es un error tipogrfico) Array Pop %Gentodo, Posicin 1, si %Gentodo no coincide con ++ (se elimina la primera entrada en la lista si est en blanco. Francamente no recuerdo la circunstancia en la que se necesitaba, pero estoy seguro de que tena un razn para ello cuando lo hice) Mostrar Escena Generic Todo La escena: el elemento de men El elemento de men es el corazn de la escena, ocupando la mayor parte de ella. Aqu es donde se establece la fuente como variable-matriz, y la variable es %Gentodo. Tenga en cuenta que, dado que la fuente es una matriz, el campo de la variable hace referencia a la variable de base de la matriz con el fin de conocer tambin todos los detalles de la matriz. El modo de seleccin se establece a mltiple, para que se puedan seleccionar varios elementos. 704internalscene.jpg Tenga en cuenta que los elementos del men de escena tienen escenas internas. Por ejemplo, la opcin de formato de tem tiene una escena sobre la que se puede hacer clic y editar. Esto establece cmo se ve cada tem, y es pre-rellenada con un campo de texto dinmico y un campo de icono dinmico. Esto se rellenar con los datos de la fuente del elemento de men, pero todava se puede utilizar esta opcin para elegir el aspecto que tendr. Mi lista genrica TODO tiene una imagen esttica de una chincheta ante el campo de texto, y termina parecindose a una vieta cuando el elemento de men est totalmente relleno. Aparte de tener una serie de elementos predeterminados, esta escena interna es la misma que las escenas a las que estamos acostumbrados. 705select.jpg La pulsacin del tem activa una tarea que contiene lo siguiente: Establecer-variable %Gtselected a %select_indices Separar-variable %Gtselected, Separador:, Establecer-variable %Gtselectedd a %Gtselected(#) %Select_indices es una variable generada automticamente (una de cuatro, las otras tres son %select_labels, %tap_label y %tap_index) que Tasker establece cuando interactuamos con el elemento de men de escena. Contiene una lista separada por comas con los nmeros de los elementos seleccionados, a partir de 0. Nota del traductor: El artculo original aade al final (1) una actualizacin en la que se explica que el inicio de este ndice est cambiado a partir de Tasker 1.3.2: ya no comienza por 0 sino por 1. Por ese motivo, la frase siguiente y otras posteriores estn caducadas, pues se escribieron antes de que Tasker corrigiese este problema. Se muestran en color atenuado para resaltar que estn obsoletas. Por lo tanto, si seleccionamos los tems 1, 3, 5 en la lista, %select_indices contendr 0,2,4. %Gtselected(#) cuenta el nmero de elementos de la matriz %Gtselected, que luego se ponen en %Gtselectedd. En resumen, %Gtselectedd contiene el nmero de artculos seleccionados. As que, cuando has seleccionado algo en el elemento de men escena, usted tiene una matriz con los nmeros de los artculos, as como una variable con el nmero de elementos seleccionados. Esto nos lleva a la funcin de eliminacin. Advertencia: Actualmente hay un error por el cual %select_indices no se actualiza al des-seleccionar el ltimo elemento. No hay forma directa de resolver este problema. Por ahora, hay que actualizar toda la escena para anular correctamente el ltimo elemento. Nota del traductor: La advertencia previa tambin ha quedado desfasada a partir de Tasker 1.3.2, que tambin corrigi ese problema (1). La escena: el botn de eliminar 706delete.jpg En mi escena, el botn (X) de eliminar tiene dos funciones: cancela la escena, y elimina elementos. La primera funcin es realizada por una pulsacin breve mediante la accin Destruir- escena. Eliminar elementos es ms complicado, y se hace manteniendo una pulsacin larga sobre el botn. En la pestaa de la pulsacin larga, las acciones son las siguientes: Si %Gtselectedd> 0 Men, Ttulo: Eliminar elementos %Gtselectedd, tem 1: S (Establecer-variable Gtcd a 1), tem 2: No (*nada*) Si %Gtcd coincide con 1 For Variable:%gendelete, tems:%Gtselected( Sumar-a-variable, nombre: %gendelete, valor: 1 Restar-de-variable, Nombre: %gendelete, Valor: %shuffle, si %shuffle no coincide con *shuffle* Array Pop, Variable: %Gentodo, Posicin: %gendelete Sumar-a-variable, nombre: %shuffle, valor: 1 End-For Escribir-archivo, Archivo: gentodo.txt, Texto: %Gentodo() End If End If Establecer-variable: %Gtcd a 0 Limpiar-variable: %shuffle Establecer-variable: %Gtselectedd a 0 Como se puede ver, hay un puado de cosas anidadas aqu. El primer Si(If) se asegura de que hay elementos seleccionados antes de intentar ejecutar acciones para eliminarlos. Te habrs dado cuenta de que hay una accin que reajusta %Gtselectedd, pero no hay accin que limpie la variable %Gtselected. Esto quiere decir que los ltimos valores de la matriz %Gtselected persisten, porque en la tarea de borrado todo est anidado en un bucle For %Gtselectedd (que se repone cada vez); as ya no volveremos a tener una situacin en la que accidentalmente se borren elementos que hubieran sido seleccionados en el pasado. Adems de eso, se desactiva eficazmente la tarea asociada a la pulsacin larga, si no hay nada seleccionado. La accin Men que est como la primera accin en el grupo For no debe confundirse con el elemento de men de escena que he mencionado muchas veces. Esta accin Men genera un cuadro emergente con una pregunta y respuestas de tipo estndar, en este caso con S y No, creando un sencillo cuadro de dilogo de confirmacin. Al hacer clic en S se establece una variable que es condicin para la siguiente accin Si(If) del grupo. Esta variable tambin se restablece al final de la tarea, por lo que siempre es 0 a menos que haga clic en S para confirmar la eliminacin. A continuacin tenemos nuestro bucle For. Se ejecutan de forma secuencial las cuatro acciones anidadas y eso se hace para cada elemento de la matriz %Gtselected. En la configuracin de la accin For , el campo de tems requiere una lista separada por comas, y no necesariamente una matriz, por lo que la escribimos con el formato %Gtselected(). Para cada elemento de la matriz %Gtselected, el valor de dicho elemento se copiar en %gendelete, que se utiliza en las siguientes cuatro acciones, y luego contina con el siguiente elemento, poniendo su valor en %gendelete, y as sucesivamente. En cuanto a las cuatro acciones anidadas, la primera simplemente resuelve un despiste cerebral del desarrollador. Ahora mismo, los elementos de men comienzan en 0, mientras que los elementos de matriz empiezan en 1. As, el valor de elemento de matriz 1 es el mismo que el elemento de men 0. Este problema se solucionar pronto de acuerdo con el desarrollador Tasker: Se corregir para que sea el mismo que los ndices obviamente. Esto va a causar problemas en las escenas de algunas personas, pero es demasiado tonto para dejar as. Mediante la adicin de 1 a %gendelete, que a su vez contiene el nmero del elemento de men seleccionado, traemos ese nmero hasta el nivel de la matriz, de manera que elemento de men 1 es el mismo como elemento de la matriz 1. Cuando los dos coinciden, se hace muy fcil quitar cosas de la matriz, usando la tercera accin del bucle For. Basta con utilizar Array-pop con %gendelete como posicin para que Tasker saque de la matriz el elemento que ocupa esa posicin. Los otros elementos superiores de la matriz son movidos hacia abajo de modo que si se elimina el elemento tercero de una matriz que tena cinco elementos, el nmero cuatro se convierte en el nmero tres. Espera, te has saltado una accin! S, en efecto. La segunda accin en el bucle For, combinada con la cuarta, corrige un problema inherente a este sistema. La primera vez que el bucle se ejecuta, los nmeros de elementos de matriz coinciden con los nmeros de elementos de men, una vez que se han aadido 1 para compensar la diferencia en la posicin inicial. Sin embargo, debido a que todos los elementos de la matriz son empujados hacia abajo cuando eliminamos un elemento, los nmeros no coinciden despus de la eliminacin! Digamos que tenemos 10 elementos en la lista/matriz, y seleccionamos los nmeros 3 y 5. %Select_indices entonces mostrar 3,5 (siempre en orden, no importa cul seleccione primero). A continuacin, el bucle For comienza borrando el elemento 3 de la matriz, lo que nos deja con 9 elementos, donde el anterior nmero 5 es ahora el nmero 4. Si el bucle For continuara normalmente, borrara el nmero 5, que era el nmero 6 cuando se seleccionaron los elementos. Para solucionar este problema, aad 1 a %shuffle al final de cada bucle. %shuffle representa el nmero de veces que la lista se ha encogido. En el grupo de acciones, la accin segunda Restar-de-variable resta este nmero del nmero del elemento que va a eliminar, pero slo si %shuffle tiene realmente un valor (la condicin Si(If) se encarga de verificarlo). Si borramos 5 elementos, entonces el nmero del elemento quinto tendr que ser ajustado hacia abajo 4 veces para mantener la coincidencia. Cuando se finaliza el bucle For, es el momento para escribir los cambios en el archivo. A diferencia de la primera versin de la lista de tareas, aqu se sobreescribe el archivo completo, porque tenemos toda la informacin en la matriz y el archivo est des- actualizado. Al escribir %Gentodo() al archivo, se escribe una lista de elementos separados por comas. La prxima vez que se abra la escena, leemos de nuevo el archivo a una variable, y luego se divide en una matriz, separando por la coma. En este punto terminamos los grupos de acciones y continuamos con tres acciones que se ejecutan siempre, aunque slo sea para dar garantas. Esencialmente se trata de limpiar las variables %Gtcd, %shuffle, y %Gtselectedd, que quedan preparadas para la prxima vez. Parecera que no es necesario limpiar %shuffle ya que es una variable local, pero si se mantiene la escena y hay que borrar algo en varios lotes, %shuffle seguira contando con el ltimo valor y por eso conviene borrarla. La escena: el indicador de tems seleccionados Hay un campo de texto en la parte inferior de la escena que muestra "%Gtselectedd tems seleccionados". Es tan simple como eso. La escena: botn nuevo tem 707add.jpg El botn para aadir un nuevo elemento no es muy complicado. La tarea es la siguiente: Consulta-de-variable Ttulo:Elemento nuevo, variable: %gentoadd Si %gentoadd no coincide con *gentoadd* Array-push, nombre:%Gentoadd, Posicin 9001, Valor: %gentoadd Escribir-archivo, Archivo:gentodo.txt, Texto:%Gentodo() End If Esta tarea es simple. Se inicia mediante la accin Consulta-de- variable para preguntar al usuario por el elemento a aadir. A continuacin, chequea si realmente se introdujo algo en la variable. Si es as, usa Array-push para aadirlo a la matriz. Al especificar una posicin muy alta (superior a 9000), queda casi garantizado que la matriz sea menor que eso, y en esos casos, simplemente se aade en la posicin siguiente del ltimo elemento que la matriz tuviera. Por lo tanto, si usted tiene una matriz de 10 elementos y agrega un nuevo elemento, se convertir realmente en el nmero 11, y no en el nmero 9001. Despus de eso, se escribe la matriz en el fichero. Un efecto secundario interesante de la utilizacin de matrices es que cuando el contenido del archivo se lee en la variable, una coma que hubiera dentro de alguno de los elementos recibir el mismo tratamiento que una coma que separa los elementos de matriz original. Esto le permite agregar varios elementos de una sola vez escribiendo varios elementos separados por comas, con el formato 1,2,3,4,5. Una vez aadido, se mostrar como un elemento con varios nmeros separados por comas, pero cuando la lista se actualiza (escena destruida, y relanzada) cada uno de los elementos separados por una coma se convertir en un elemento independiente. El inconveniente es que no se pueden utilizar las comas dentro de un elemento de texto, pero creo que compensa por la ventaja de poder aadir varios elementos de una sola vez, en la misma escritura. La escena: el botn actualizar Alertas Lo que he mostrado hasta ahora es mi nueva lista TODO genrica, que es nueva (antes yo sola usar una app indpendiente con widget). Pero tengo otras tres otras listas especficas (casa, comprar, por la maana) que tambin utilizan este sistema de matrices. El concepto bsico es el mismo, slo ligeramente diferente para acomodar tres listas en la misma escena. Las tres listas tienen diferentes alertas, por lo que tendra que asumir los necesarios cambios, pero en realidad no hace falta. Todas ellas trabajan mediante la lectura de los contenidos del archivo, la comprobacin para ver si hay algo en el archivo, y luego actuar basado en eso. Los productos estn separados por una coma en lugar de cambio de lnea, pero eso no afecta a los sistemas de alerta. Integracin con AutoRemote En todas estas listas de tareas ahora se pueden agregar elementos de forma remota, desde AutoRemote . Este sistema tuvo que ser cambiado cuando reconstru el sistema TODO. El formato para la adicin es el mismo, es decir, "Todo tag=:=nombre del elemento", slo con la adicin de una etiqueta de lista genrica/universal. Al recibir un mensaje en este formato se activa una tarea que tiene cuatro grupos de acciones idnticos a excepcin de las variables y las identificaciones de archivos, que estn adaptadas a cada lista. La condicin Si(If) de cada grupo es la coincidencia con la etiqueta apropiada. Para la lista universal, el grupo es el siguiente: Si %arpar2 coincide con genrico/universal Leer-archivo, Archivo:gentodo.txt a Var:%Gentodo (lee el archivo de mi lista genrica TODO en una variable) Separar-variable %Gentodo, Separador:, Array-push, nombre:%Gentoadd, Posicin 9001, Valor: %arcomm Escribir-archivo, Archivo:gentodo.txt, Texto:%Gentodo() End If A estas alturas ya se sabe lo que hacen todas estas acciones, porque ya han sido explicadas antes. La nica diferencia es que a la matriz se aade %arcomm en lugar de %gentoadd. Como he dicho, hay cuatro grupos de este tipo en la misma tarea, una para cada uno de mis cuatro listas. Despus de los cuatro grupos Si (If), al final la tarea aade una ltima accin que es la siguiente: Decir "Producto aadido a la lista %arpar2" Integracin AutoRemote Chrome 708chrome.jpg Hasta ahora slo he utilizado el plugin AutoRemote de Chrome para copiar texto desde el explorador a mi telfono . Pens que sera ms fcil para agregar elementos a mi lista, as que he aadido unas cuantas reglas para el plugin de Chrome. Cada regla tiene un nombre que en realidad no importa, y un comando como "Compras pendientes". Esto me permite seleccionar texto en Chrome, hacer clic derecho en el ratn y enviarlo a mi tarea de listas (que he indicado antes). Es una opcin muy til, que incluso me permite ir a cualquier campo de bsqueda (como en google.com), escribir algo, seleccionarlo y enviarlo a cualquiera de mis listas. http://www.youtube.com/watch?v=kM_YWA_tFUQ (1) Actualizacin: Tasker beta 1.3.2b2 y siguientes Ha sido solucionado el problema de discrepancia numrica entre las matrices y el men de escena, y tambin el problema de des- seleccionar el ltimo elemento. Ambos se han resuelto en la ltima versin beta de Tasker, lo que implica que la prxima versin tambin incorporar esas correcciones. El cambio en la lista TODO es que ya no hay que agregar 1 a %gendelete, y la tarea de la solapa Tap en el elemento de men de escena debe quedar as: Si %select_indices no coincide *select* Establecer-variable %Gtselected a %select_indices Separar-variable %Gtselected, Separador:, Establecer-variable %Gtselectedd a %Gtselected(#) Else Establecer-variable %Gtselectedd a 0 End If En conclusin Las matrices y bucles For permiten ahorrar mucho trabajo. Hay algn problema con las matrices globales y los elementos de men de escena, donde todo se ralentiza significativamente debido a que las variables globales tienen que estar establecidas todo el tiempo. Eso apenas importa en una pequea lista de tareas, pero en un artculo posterior voy a mostrar cmo hacer un explorador de archivos basado en Tasker, donde s que importa. Originalmente haba hecho un navegador utilizando matrices y su funcionamiento era demasiado lento, y despus de un poco de ayuda de otro usuario de Tasker, result que las matrices eran extremadamente ineficientes en esa situacin particular. Esto podra ser un problema grave, pero ya sabemos varias formas de acelerarlo. Aun as, la iteracin actual funciona muy bien, al menos para mi uso.