[..] Variables imbriquées

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Thorien
Niveau 1
Niveau 1
Messages : 3
Enregistré le : mar. 21 déc. 2010 12:51
Status : Hors ligne

[..] Variables imbriquées

#1

Message par Thorien »

Bonjour,

Je souhaite savoir s'il est possible de créer des variables imbriquées.

En fait je souhaite réaliser une boucle qui va passer sur plusieurs champ d'un programme. Ma problématique, c'est que les numéros d'intances ne se suivent pas.

Je veux donc regrouper les instances dans un pavé.

Puis au sein d'une boucle appeller la bonne variable

Code : Tout sélectionner

$intance1 = 3
$intance2 = 5
[color=#008000];...etc[/color]

$nomdelaclasse = "c'est la classe !"
$count = 1

While $count < 10
    [color=#FF0000]$instanceencours = "$instance" & $count[/color] [color=#008000];l'objectif est que la variable appellée change à chaque fois[/color]
    $A = "[CLASS:" & $nomdelaclasse &"; INSTANCE:" & $instanceencours & "]"
    ControlClick("Programme X", "", $A)
    send("tagadatsointsoin")
    $count =  $count + 1
WEnd
Est-ce techniquement faisable ? Si oui, dois-je selon vous opérer des modifications dans le code ?

Merci par avance de vos retours
Avatar du membre
zeshrek
Niveau 10
Niveau 10
Messages : 984
Enregistré le : mer. 17 nov. 2010 09:31
Localisation : Sur ma chaise
Status : Hors ligne

Re: [..] Variables imbriquées

#2

Message par zeshrek »

Bin, déjà plutot qu'une liste de variables, tu peux utiliser un tableau :

Code : Tout sélectionner

dim $instance[10] = [3,5,... etc] ; ici tu mets les valeurs de tes 10 instances séparés par des virgules
$nomdelaclasse = "c'est la classe !"
for $count = 0 to 9
    $A = "[CLASS:" & $nomdelaclasse &"; INSTANCE:" & $instance[$count] & "]"
    ControlClick("Programme X", "", $A)
    send("tagadatsointsoin")
Next
 
Ca fait la meme chose que ton code, et tu économises la variable $instanceencours, et c'est plus propre... mais c'est toi qui voit ;)
Si vis pacem para bellum
Avatar du membre
Fish
Niveau 5
Niveau 5
Messages : 178
Enregistré le : sam. 23 oct. 2010 19:28
Localisation : Devant mon ordinateur.
Status : Hors ligne

Re: [..] Variables imbriquées

#3

Message par Fish »

Hello!

Moi je trouve que c'est plus clair un liste qu'un tableau avec des [0] etc de partout!
Mais après c'est toi qui voit! :lol:

Edit : Tu pourrait dire bonjours quand tu rentre Zeshrek! :P (Je Lol).
Cordialement,
Fish-panai.
P.S (Pas Salé): Vive le poisson pané.
Avatar du membre
Iste
Niveau 11
Niveau 11
Messages : 1870
Enregistré le : jeu. 04 déc. 2008 14:21
Localisation : 76
Status : Hors ligne

Re: [..] Variables imbriquées

#4

Message par Iste »

La solution de zeshrek est surement la plus intelligente, mais sachez qu'en autoit l'on peut faire appel a la puissance de l'introspection pour ce genre d'opération.
Voir : call(), eval() et les fonction liées.
Signez ici
Avatar du membre
zeshrek
Niveau 10
Niveau 10
Messages : 984
Enregistré le : mer. 17 nov. 2010 09:31
Localisation : Sur ma chaise
Status : Hors ligne

Re: [..] Variables imbriquées

#5

Message par zeshrek »

@Fish : L'avantage d'un tableau, c'est qu'on peut avoir une grosse quantités de variables qui s'initialisent et s'utilisent tres simplement sur une simple boucle for/next, ou individuellement grace a leur numéro d'enregistrement. Perso, j'ai mis tres longtemps a comprendre l'interet d'un tableau genre $var[0-x] par rapport à $var1 $var2... $varx.
En fait c'est quand tu commence a manipuler des tableaux multidimentionels ($var[0-w][0-x][0-y][0-z] par ex) que tu te rends compet que c'est carrément plus pratique. Imagine mon exemple avec seulement 10 valeurs sur chaque dimension, tu as 10*10*10*10=10.000 variables. Bonjour le nombre de ligne si tu les initialises une par une !

@Iste : Waow ! C'est gentil ca ! Même si a la place d'intelligente j'aurai dit pratique, ou... simple.
En tout cas call() et eval() ca a l'air redoutable, mais sans doute un peu lourd a mettre en place (c'est comme tout ca demande a etre familier avec le concept). Pour l'instant, je vais continuer avec mes tableaux ;)
Si vis pacem para bellum
Avatar du membre
Iste
Niveau 11
Niveau 11
Messages : 1870
Enregistré le : jeu. 04 déc. 2008 14:21
Localisation : 76
Status : Hors ligne

Re: [..] Variables imbriquées

#6

Message par Iste »

N'oubliez pas Eval, IsDeclared, Execute...

L'introspection c'est tres puissant, mais a n'utiliser que dans des cas bien particuliers.
Ca peut très vite donner du code très crade et lourd.
Mais dans certain cas, cela permet d'avoir un code vraiment puissant, par exemple :

Execute() peut permettre a un utilisateur du logiciel d'agir directement sur le code (une inputbox pour récup la commande, et hop ! on change une variable global)
Signez ici
Thorien
Niveau 1
Niveau 1
Messages : 3
Enregistré le : mar. 21 déc. 2010 12:51
Status : Hors ligne

Re: [..] Variables imbriquées

#7

Message par Thorien »

Merci pour ces retours !

===@zeshrek===
Je n'ai exposé que la face visible de mon glaçon. En fait je dispose de plusieurs données sur lesquels je dois intéragire. Pour chauqe donnée je vais travailler sur deux champs, chacun ayant une classe et une instance particulière. Donc si je dois utiliser les tableaux je dois travailler sur un tableau à 5 colonne :
- un ID
- une première classe
- une première instance
- une seconde classe
- une seconde instance

Et dans ce cas les tableaux ne semble pas répondre à ma problématique car ils devraient méler nombres et chaines de caractères. A moins que tu connaisse une méthode permettant de combiner les deux ?

===@Iste===
Eval devrait en effet me permettre de réaliser des fonctions imbriquées.
Pour la fonction call, je ne comprends pas son fonctionnement. Je vais regarder si je trouve des infos "digestes" dessus...
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

Re: [..] Variables imbriquées

#8

Message par timmalos »

Ma fonction call ne devrait pas vous être utile, mais en effet Eval correspond à ce que vous cherchez. Cette fonction est tres utile lorsque utilsée dans une boucle pour modifier le nom de la variable utilisé.
Avatar du membre
zeshrek
Niveau 10
Niveau 10
Messages : 984
Enregistré le : mer. 17 nov. 2010 09:31
Localisation : Sur ma chaise
Status : Hors ligne

Re: [..] Variables imbriquées

#9

Message par zeshrek »

Hmmm.... autoit sait tres bien traiter les nombres a la fois comme des valeurs numérique et des chaines
exemple :

Code : Tout sélectionner

for $i = 1 to 10 ; ici $i est traité en tant que valeur
    $message = "A la boucle N° "&$i& " $i fait "&stringlen($i)&" caracteres" ; ici sur la meme ligne $i est utilisé une premiere fois en tant que nombre et une seconde en tant que chaine
    MsgBox(0,"",$message)
Next
 
Donc, enfin a mon humble avis, vu que je n'ai pas la science infuse, un tableau, fut il a 5 dimensions serait tout a fait utilisable
Si vis pacem para bellum
Thorien
Niveau 1
Niveau 1
Messages : 3
Enregistré le : mar. 21 déc. 2010 12:51
Status : Hors ligne

Re: [..] Variables imbriquées

#10

Message par Thorien »

Si je comprends bien call permet d'appeller une fonction préalablement mentionnée

Par exemble :

fonction y = send("tagadatsointsoin")
Si x=1
alors call fonction y

Comment ecrirait-on cette fonction ?
Répondre