NOTA: si estais empezando con AutoIt esta información hará que os estalle la cabeza. Usando estas técnicas es fácil cometer errores muy difíciles de detectar. ¡Mejor usa matrices!
Desde luego es una necesidad muy peculiar, y algo que yo evitaría porque efectivamente puede ser muy fácil cometer errores, pues el chequeador de sintaxis no puede ver cómo estás manipulando esas variables.
Cuando hay que crear variables dinámicamente (por ejemplo para almacenar un grupo de preferencias, que a lo mejor es variable) recomiendo usar matrices, son como variables con números, en vez de
$variable1 y
$variable2 pues usas
$variable[1] y
$variable[2].
Dicho esto te comento como se puede hacer. Para crear una variable al vuelo se hace con
Assign:
Assign("mi_variable", "Soy un autoIter")
Esto es equivalente a
$mi_variable = "Soy un autoIter"
con la peculiaridad de que como en la función le pasas una cadena de caracteres, eso puede ser una variable, con lo que puede no saberse el nombre de la variable en tiempo de diseño, sino que se puede crear en ejecución.
Assign tiene un parámetro para forzar creación de variable (por defecto), darle ámbito global, local, etc..
A partir de ahí se puede usar la variable normalmente, aunque los chequeadores de sintaxis se pueden quejar si ven que la usas... porque no saben que ha sido declarada.
Normalmente la manera de acceder a ella es con la función
Eval, que devuelve el valor de una variable cuyo nombre está en un string, en realidad lo normal es que sea necesario pues tendrás el nombre de la variable en otra variable... y puede que no sepas qué nombre es ese...
Código: Seleccionar todo
$nomVar = "mi_variable" ;Este es el nombre de la variable, que podría estar calculado por código, preguntado al usuario, etc...
Assign($nomVar, "Soy un autoIter", 0)
$cadena = "¡Hola! " & Eval($nomVar)
Piensa que
$nomVar podría ser preguntado al usuario o calcularlo en tiempo de ejecución, con lo que realmente escribiendo el programa no sabríamos cómo se llama la variable y no la podemos usar directamente. Yo le he puesto directamente "mi_variable" por simplificar.
Eso también se puede usar para poner índices, tal como quería
iamchavo, ¡pero sigo recomendando matrices!. La manera "fea" de hacer aquéllo es esta:
Código: Seleccionar todo
$url1 = "uno"
$url2 = "dos"
$url3 = "tres"
For $i = 1 To 3
MsgBox(0, "", Eval("url" & $i))
Next
En vez de abrir páginas web muestro los valores , este código es para que sea más fácil probarlo pero hacer lo de arriba es trivial modificando esto.
Cuando se crean variables dinámicamente otra función útil es
IsDeclared, que te dice si la variable existe (le pasas un string con el nombre de la variable), cosa que no es tontería porque como las creas al vuelo es fácil que tengas que comprobar las variables cuando vas a usarlas, porque si no existen te darán errores en ejecución...