PDA

Ver la Versión Completa : Intercalar valores de 2 variables o arrays


leromaro
18/07/16, 19:46:50
Hola: nunca entendí bien la diferencia y estuve leyendo de todo (recopilatorio, pagina de tasker en ingles y español y haciendo pruebas con cualquier cosa, pero no puedo hacer algo tan simple como entrelazar los datos de dos array, ej tengo una variable %frutas que contiene: banana,manzana y la variable %numero que contiene:1,2 lo que quiero es entrecruzar los datos, que el resultado sea banana 1,manzana 2.
Probé separando las variables y luego no se como unir uno a uno los datos, con autotools también con la opción de array pero no lo logro.

Cualquier método me viene bien, estoy atascado en algo que se que es simple pero no logro dilucidar.

Si alguien me puede explicar con un ejemplo práctico (como a los niños), tal vez entienda en que le estoy errando.
Gracias.

WillyWeb
18/07/16, 20:52:13
Lo primero sería generar el correspondiente array a partir de esas variables con valores separado por comas...

Separar variable [ Nombre:%frutas Separador: , ]
Separar variable [ Nombre:%numeros Separador: , ]

Luego puedes recorrer cada array con un bucle como este...

For [ Variable:%fruta Ítems:%frutas() ]
Flash [ Texto:%fruta ]
End For

O como este otro...

For [ Variable:%num Ítems: 1:%frutas(#) ]
Flash [ Texto:%frutas(%num) ]
End For

Con ese mismo procedimiento podrías recorrer varios arrays al mismo tiempo...

For [ Variable:%num Ítems: 1:%frutas(#) ]
Flash [ Texto:%frutas(%num) / %numero(%num) ]
End For

...suponiendo que ambos tengan el mismo número de elementos. En otro caso tendrías que añadir acciones para controlarlo.

Visto esto no sería muy complicado generar un tercer array con el resultado que estás buscando...

For [ Variable:%num Ítems: 1:%frutas(#) ]
Establecer variable [ Nombre:%resultado(%num) A:%frutas(%num) y %numero(%num) ]
Flash [ Texto:%resultado(%num) ]
End For

¿Te vale con esas pistas? :rolleyes:

leromaro
19/07/16, 00:45:30
Willy: juro que detesto estar preguntando esto nuevamente, pero necesito ayuda porque sigo sin entender demasiado.
Esta sería la tarea que funciona para nuestro ejemplo.

Prueba (149)
A1: Establecer variable [ Nombre:%frutas A:banana,manzana Calcular:Apagado Añadir:Apagado ]
A2: Establecer variable [ Nombre:%numero A:1,2 Calcular:Apagado Añadir:Apagado ]
A3: Separar variable [ Nombre:%frutas Separador:, Eliminar base:Apagado ]
A4: Separar variable [ Nombre:%numero Separador:, Eliminar base:Apagado ]
A5: For [ Variable:%num Ítems:%numero() ]
A6: Establecer variable [ Nombre:%resultado(%num) A:%frutas(%num),%numero(%num) Calcular:Apagado Añadir:Apagado ]
A7: Flash [ Texto:%resultado(%num) Largo:Apagado ]
A8: End For


Perfecto, crea la variable %resultado que contiene banana,1,manzana,2
Pero al querer aplicarlo a mi tarea real no me funciona. Exporto parte de la tarea para que veas por donde viene.
La tarea original está ejecuta con Autospotify, el cual no tengo y pensé modificarla con autoweb, pero me trabo en este paso.
Tengo variables en mayúscula para ver los resultados.

Prueba2 (150)
A1: Si (if) [ %CLIP ~R https://open.spotify.com/track/ ]
A2: AutoTools Dialog [ Configuración:Dialog Type: 2 Choices
Choice One: No
Choice One Command: false
Choice Two: Yes
Choice Two Command: true
Text: Crear una playlist con canciones similares?
Text Size: 20
Use HTML: false
Dim Background: true
Cancelable: true
Turn Screen On: true Cuenta atrás (segundos):60 ]
A3: Si (if) [ %atcommand ~ true ]
A4: Establecer variable [ Nombre:%url A:%CLIP Calcular:Apagado Añadir:Apagado ]
A5: Separar variable [ Nombre:%url Separador:https://open.spotify.com/track/ Eliminar base:Apagado ]
A6: AutoWeb Web Service [ Configuración:API: Spotify
API Action: Get a track
Id: %url2 Cuenta atrás (segundos):120 ]
A7: AutoWeb Web Service [ Configuración:API: Last.fm
API Action: Get similiar songs
Track: %trackname
Artist: %trackartistnames1
Limit: 3 Cuenta atrás (segundos):120 ]
A8: Establecer variable [ Nombre:%Nombre A:%artist_name() Calcular:Apagado Añadir:Apagado ]
A9: Establecer variable [ Nombre:%Pista A:%track_name() Calcular:Apagado Añadir:Apagado ]
A10: Separar variable [ Nombre:%Nombre Separador:, Eliminar base:Apagado ]
A11: Separar variable [ Nombre:%Pista Separador:, Eliminar base:Apagado ]
A12: For [ Variable:%num Ítems:%Nombre() ]
A13: Establecer variable [ Nombre:%Resultado(%num) A:%Pista(%num),%Nombre(%num) Calcular:Apagado Añadir:Apagado ]
A14: Flash [ Texto:%Resultado(%num) Largo:Apagado ]
A15: End For
A16: Fin si (End if)
A17: Fin si (End if)


En la acción A7 me devuelve dos arrays %artist_name() y %track_name() con 3 items cada uno. los convierto en variable %Nombre y %Pista y los separo creando %Nombre1 %Nombre2 y %Nombre3 y %Pista1, %Pista2 y %Pista3
con su contenido perfectamente.
Cuando ejecuto en A12 el For es donde no logro ver el error

Si pongo A12: For [ Variable:%num Ítems:%Nombre() ]
Me crea %Resultado0 con el contenido %Pista0,%Nombre0

Si pongo A12: For [ Variable:%num Ítems:%Nombre(#) ]
Me crea solamente %Resultado3 con el contenido correcto

Espero no ponerme pesado, pero no veo el error

WillyWeb
19/07/16, 08:20:07
Esta acción...

For [ Variable: %num Ítems: %numero() ]

...significa. Para cada elemento del array %numero() mete en %num el valor de ese elemento. En ese ejemplo el array %numero contiene números por lo que %num también contendrá un número. En la siguiente acción de tu ejemplo usas %num como un índice para referenciar los elementos de otros arrays, y funciona porque casualmente %num contiene un número.

En A12 del segundo bloque usas un bucle similar al del ejemplo, pero esta vez el array que recorres (%Nombre) no contiene números por lo que %num no contendrá números. Luego usas ese %num como un índice para referenciar los elementos de otros arrays, y eso es lo que no funciona porque %num no es un número de índice, es un texto, y eso no se puede usar como índice.

En A12 deberías poner algo así...

For [ Variable:%num Ítems: 1:%Nombre(#) ]

...para que haga lo que pretendes. En cada vuelta del bucle la variable %num tomará un valor entre 1 y el número de elementos del array %Nombre. Luego podrás usar ese %num como índice para el resto de arrays.

Resumiendo...

For [ Variable:%num Ítems:%Nombre() ] pone en %num el valor de cada elemento de %Nombre

For [ Variable:%num Ítems:%Nombre(#) ] pone en %num el número de elementos de %Nombre

For [ Variable:%num Ítems: 1:%Nombre(#) ] pone en %num un número de 1 al número de elementos de %Nombre

¿Ves la diferencia entre cada una de esas sentencias?

leromaro
19/07/16, 14:58:03
Si das pescado a un hombre hambriento, le nutres una jornada. Si le enseñas a pescar, le nutrirás toda la vida. (Lao-Tsé - Filósofo chino)
ahhhhh ahopra sí.
Todavía necesito el pescado cocido...
Bien con estas "pistas", o sea todo hecho, seguiré el perfil, entendiendo un poco más.

WillyWeb
19/07/16, 15:19:38
ahhhhh ahopra sí.

Estupendo :platano: