[R] Mettre une variable dans le nom d'une autre variable ?

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
sheen
Niveau 1
Niveau 1
Messages : 8
Enregistré le : dim. 14 déc. 2008 13:24
Status : Hors ligne

[R] Mettre une variable dans le nom d'une autre variable ?

#1

Message par sheen »

Bonjour à tous,

Je suis débutant, ce que je souhaite faire est primaire, surtout pour vous je pense, je n'arrive pas à trouver la syntaxe correcte, peut être pourriez vous m'aider.


J'ai simplement une variable $x = 14 (par exemple)
Je souhaiterai créer une autre variable qui utilise $x dans sa valeur

Par exemple : $y = $fichier$x ----> Ce qui dans ma tête donnerait $y = $fichier14

Simplement je ne trouve pas la syntaxe correcte, Autoit ne comprend pas ce que je veux.
J'ai essayé diverses possibilité mais je bloque :
$y = $fichier($x)
$y = $fichier"$x"
$y = $fichier'$x'
$y = $"fichier($x)"
Etc...

Voila, c'est tout bête, je ne trouve pas la bonne syntaxe.
Merci pour votre future aide ;)
Modifié en dernier par sheen le dim. 14 déc. 2008 23:52, modifié 2 fois.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11784
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: Mettre une variable dans la valeur d'une autre variable ?

#2

Message par Tlem »

Regardez du coté de la commande EVAL.

Merci de respecter les règles de présentation d'un message dont voici le lien : http://www.autoitscript.fr/forum/viewto ... f=35&t=595.
Modifiez le titre de votre message en ajoutant la balise [..] ou [R] si vous considérez le problème résolu.
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
moutelous
Niveau 6
Niveau 6
Messages : 229
Enregistré le : sam. 09 févr. 2008 19:51
Localisation : Rennes
Status : Hors ligne

Re: [..] Mettre une variable dans le nom d'une autre variable ?

#3

Message par moutelous »

Bonjour,
sheen a écrit :Par exemple : $y = $fichier$x ----> Ce qui dans ma tête donnerait $y = $fichier14
D'après ce que je comprends de votre question l'opérateur de concaténation "&" devrait suffire...

Code : Tout sélectionner

$y = $fichier&$x
A+
A+
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11784
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Mettre une variable dans le nom d'une autre variable ?

#4

Message par Tlem »

Hummm je ne suis pas certains que ceci fonctionne correctement car dans ce cas la variable $y sera égale au contenu de la variable $fichier ET (&) de la variable $x.

Or sheen souhaite $y = $fichier14.
Ce qui nous donne : $y = Eval("fichier" & $x)
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
moutelous
Niveau 6
Niveau 6
Messages : 229
Enregistré le : sam. 09 févr. 2008 19:51
Localisation : Rennes
Status : Hors ligne

Re: [..] Mettre une variable dans le nom d'une autre variable ?

#5

Message par moutelous »

Bonsoir,

Ouaip Tlem, c'est pour cela que j'émettais des doutes sur ma compréhension de la question ... mais je ne crois pas qu'il faille chercher midi à quatorze heures ...

Ceci dit notre ami Sheen a diverses solutions à sa disposition et si tout cela ne lui convient pas il saura bien s'exprimer j'en suis sûr ... :wink:

A+
A+
sheen
Niveau 1
Niveau 1
Messages : 8
Enregistré le : dim. 14 déc. 2008 13:24
Status : Hors ligne

Re: [..] Mettre une variable dans le nom d'une autre variable ?

#6

Message par sheen »

Ça marche parfaitement avec Eval, j'avais essayé juste avec "&" mais comme le pensait Tlem ça ne fonctionnait pas comme je le voulais.
Merci à vous deux ;)

Je met le sujet en résolu, mais j'aurais quand même une deuxième question s.v.p ^^



Est il possible plutôt que de créer 4 états pour la variable, de créer une seule variable et de spécifier qu'elle aura 4 états.
Explication :

* A la base j'ai quelques chose comme ça :
$x1 = valeur1
$x2 = valeur2
$x3 = valeur3
$x4 = valeur4
$y1 = valeur5
$y2 = valeur6
$y3 = valeur7
$y4 = valeur8

* Existe-t-il une commande pour simplifier qui ferrait ceci ? :
; Je défini une variable x qui peut être appelée dans 4 états différents ($x1/$x2/$x3/$x4)
; J'invente la commande, mais ce serait quelque chose comme ça je pense
$x[4] = (valeur1,valeur2,valeur3,valeur4)
$y[4] = (valeur5,valeur6,valeur7,valeur8)
Et donc là par exemple si je demande $y3, autoit comprend qu'il s'agit de "valeur7"
SagePourpre
Niveau 7
Niveau 7
Messages : 442
Enregistré le : dim. 06 juil. 2008 09:11
Status : Hors ligne

Re: [R] Mettre une variable dans le nom d'une autre variable ?

#7

Message par SagePourpre »

Code : Tout sélectionner

For $i = 1 To 4
    Assign("X" & $i,"Valeur",2)
Next

; ou encore


Dim $x[5] ; Création du tableau comportant 4 éléments + 1 (pour le 0,)

For $i = 1 To 4
    $x[$i] = "Valeur" 
Next


; ou encore

Dim $x[5]
$x[0] = 4
$x[1] = "Bob"
$x[2] = "Pomme"
$x[3] = "Canelle"
$x[4] = 6
Si tu utilises la première solution (en utilisant la commande "assign"), tu devras
utiliser la commande eval pour "lire" tes variables par la suite. La création du tableau de la deuxième et troisième solution élime le besoin de "Eval"
Le Sage Pourpre, pour qui la vie est tellement
plus belle vue du haut de son Pouf = )
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11784
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [R] Mettre une variable dans le nom d'une autre variable ?

#8

Message par Tlem »

+1 pour l'utilisation du tableau.
J'ajouterais seulement que si les valeurs : valeur1, valeur2, valeur3 ... sont connues, alors on peut déclarer le tableau comme ceci :

Code : Tout sélectionner

$aValeur[4] = [valeur1, valeur2, valeur3, valeur4]
et dans ce cas $aValeur[0] est égal à valeur1, $aValeur[1] égal valeur2 ...
On remarque un décalage des valeurs puisque lors de la déclaration du tableau valeur1 à été mis dans $aValeur[0].
Pour tricher et ce retrouver avec $aValeur[1] égale à valeur1, le plus simple est de déclaré le tableau comme ceci :

Code : Tout sélectionner

$aValeur[5] = [4, valeur1, valeur2, valeur3, valeur4]
4 représente le nombre de valeur du tableau sans son premier élément ($aValeur[0]).
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
sheen
Niveau 1
Niveau 1
Messages : 8
Enregistré le : dim. 14 déc. 2008 13:24
Status : Hors ligne

Re: [R] Mettre une variable dans le nom d'une autre variable ?

#9

Message par sheen »

Wow, merci beaucoup je pense que là je devrais trouver mon bonheur :D
sheen
Niveau 1
Niveau 1
Messages : 8
Enregistré le : dim. 14 déc. 2008 13:24
Status : Hors ligne

Re: [R] Mettre une variable dans le nom d'une autre variable ?

#10

Message par sheen »

Bon après divers essais, les deux fonctions que vous m'avez données marchent, mais bizarrement elles ne fonctionnent pas ensemble, explication :

Code : Tout sélectionner

$x = 2
dim $a1[5] = [0, 10, 20, 30, 40]
dim $a2[5] = [0, 100, 200, 300, 400]
dim $a3[5] = [0, 1000, 2000, 3000, 4000]
dim $a4[5] = [0, 10000, 20000, 30000, 40000]
$fin = Eval("a" & $x & "[3]")
Si l'on suit le raisonnement, dans ce cas là $fin = a2[3] = 300
Or la variable $fin est vide, apparemment le Eval ne fonctionne pas et je ne sais pas pourquoi.
Bien sur, si j'écris direct $fin = a2[3] là ça fonctionne, donc le problème vient bien de Eval.

Auriez vous une idée de pourquoi ça ne fonctionne pas ?
Merci bien ^^
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11784
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [R] Mettre une variable dans le nom d'une autre variable ?

#11

Message par Tlem »

Les commandes Assign et Eval, sont deux commandes complémentaires.
Si vous regardez l'aide de la commande Assign, il est stipulé que le nom de la variable ne peut être un élément de tableau.
Donc par conséquent vous ne pouvez utiliser un élément de tableau avec la commande Eval.

D'ailleurs, je ne vois pas bien l'intérêt d'une telle chose puisque le tableau vous permet une variation sur sont indice ...

Sachez aussi que si le tableau à une dimension ne vous suffit pas, vous pouvez rajouter d'autres dimensions ...
Genre (tiré de l'aide de la commande DIM) :

Code : Tout sélectionner

Dim $Grid[2][4]=[["Paul", "Jim", "Richard", "Louis"], [485.44, 160.68, 275.16, 320.00]]
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
sheen
Niveau 1
Niveau 1
Messages : 8
Enregistré le : dim. 14 déc. 2008 13:24
Status : Hors ligne

Re: [R] Mettre une variable dans le nom d'une autre variable ?

#12

Message par sheen »

Merci pour ta réponse.
C'est donc une limite technique, bien dommage tout ça : /
Il va falloir que je trouve un autre moyen pour obtenir la variable à partir de ces éléments, c'est pas gagné.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11784
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [R] Mettre une variable dans le nom d'une autre variable ?

#13

Message par Tlem »

C'est peut être pour vous une limite technique, mais je trouve ceci 100 fois plus simple :

Code : Tout sélectionner

Dim $a[5][5]=[[0,0,0,0,0],[0,10,20,30,40],[0,100,200,300,400],[0,1000,2000,3000,4000],[0,10000,20000,30000,40000]]

MsgBox(0,"Valeur de $a[2][3]", $a[2][3])
Une simple boucle me suffit à faire varier les différents éléments du tableau.
Imaginez un tableau de 5 lignes et de 5 colonnes. ;)
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Cyrille
Niveau 3
Niveau 3
Messages : 46
Enregistré le : lun. 21 avr. 2008 12:18
Status : Hors ligne

Re: [R] Mettre une variable dans le nom d'une autre variable ?

#14

Message par Cyrille »

Effectivement, c'est plus simple comme ça ^^

Bon courrage pour la suite.

Je suis content de découvrir 'Eval'. C'est comme les super variables en php, non ?
sheen
Niveau 1
Niveau 1
Messages : 8
Enregistré le : dim. 14 déc. 2008 13:24
Status : Hors ligne

Re: [R] Mettre une variable dans le nom d'une autre variable ?

#15

Message par sheen »

Mon problème est que je veux faire incrémenter la valeur de x à chaque boucle, par exemple :
$x = 2
dim $a1[5] = [0, 10, 20, 30, 40]
dim $a2[5] = [0, 100, 200, 300, 400]
dim $a3[5] = [0, 1000, 2000, 3000, 4000]
dim $a4[5] = [0, 10000, 20000, 30000, 40000]
while 1
$fin = Eval("a" & $x & "[3]")
$x = x+1
WEnd
Même en utilisant le tableau avec plusieurs dimensions je ne vois pas comment procéder étant donné que je ne peux pas faire varier le chiffre dans le nom de la variable vu que Eval ne le gère pas.
Il doit probablement y avoir une méthode, mais je n'arrive pas à mettre la main dessus.
SagePourpre
Niveau 7
Niveau 7
Messages : 442
Enregistré le : dim. 06 juil. 2008 09:11
Status : Hors ligne

Re: [R] Mettre une variable dans le nom d'une autre variable ?

#16

Message par SagePourpre »

Voilà ...

Le code ci-dessous devrait t'aider. Il y'a deux exemples.

Les deux utilisent le tableau multidimensionnel fourni par Tlem

Essaie le code dans scite, tu vas voir le résultat dans ta console.
Cela devrait corresponde à ce que tu cherches à faire. La première
boucle incrémente seulement la première colonne. (10,100,1000,10000)
tandis que la deuxième boucle fait la même chose avec chaque colonne (ce qui donne :
10,100,1000,10000,20,200,2000,20000,30,300,etc... )

Code : Tout sélectionner


;le tableau de Tlem
Dim $a[5][5]=[[0,0,0,0,0], _
             [0,10,20,30,40], _
             [0,100,200,300,400], _
             [0,1000,2000,3000,4000], _
             [0,10000,20000,30000,40000]]
             

ConsoleWrite("Boucle # 1 : Incrémentation de la première colonne" & @CRLF & @CRLF )
; Boucle pour faire monter $x
For $i = 1 To 4  
    ConsoleWrite($a[$i][1] & @CRLF) ; voilà ... j'ai placé ta variable dans un consolewrite afin de démontrer le résultat)
Next



ConsoleWrite(@CRLF & @CRLF & "Boucle # 2 : incrémentation de la première colonne, puis passage à la seconde et ainsi de suite" & @CRLF & @CRLF)
; Boucle pour faire monter $x 

For $i = 1 To 4
    For $j = 1 To 4
        ConsoleWrite($a[$j][$i] & @CRLF)
    Next
Next
Le Sage Pourpre, pour qui la vie est tellement
plus belle vue du haut de son Pouf = )
sheen
Niveau 1
Niveau 1
Messages : 8
Enregistré le : dim. 14 déc. 2008 13:24
Status : Hors ligne

Re: [R] Mettre une variable dans le nom d'une autre variable ?

#17

Message par sheen »

Ca marche nickel.
Merci pour votre aide précieuse =)
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11784
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [R] Mettre une variable dans le nom d'une autre variable ?

#18

Message par Tlem »

Vous y mettez franchement beaucoup de mauvaise volonté. :evil:

Essayez ce script :

Code : Tout sélectionner

Dim $a[5][5]=[[0,0,0,0,0],[0,10,20,30,40],[0,100,200,300,400],[0,1000,2000,3000,4000],[0,10000,20000,30000,40000]]

For $i = 1 to 4
    For $j = 1 to 4
        MsgBox(0,"Mon tableau", "Valeur de $a[" & $i & "][" & $j & "] = " & $a[$i][$j])
    Next
Next
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
sheen
Niveau 1
Niveau 1
Messages : 8
Enregistré le : dim. 14 déc. 2008 13:24
Status : Hors ligne

Re: [R] Mettre une variable dans le nom d'une autre variable ?

#19

Message par sheen »

Non honnêtement je n'y met aucune mauvaise volonté, c'est juste que je n'ai jamais programmé et je galère beaucoup.
Pourtant je squatte pas mal la documentation du site Autoit, mais ce ne sont que des références rapides, et n'ayant aucune base de programmation bah j'ai du mal.

En tout cas merci beaucoup vous avez justement été super sympa avec moi malgré mes grosses questions de débutants, je suis bien heureux d'être tombé sur ce forum.

En passant si vous connaissez une doc/tuto sur Autoit plus complête (ou du moins plus explicite) que la doc officielle je suis preneur, ça m'évitera de vous poser des questions dont pour vous la réponse semble évidente =)
Cyrille
Niveau 3
Niveau 3
Messages : 46
Enregistré le : lun. 21 avr. 2008 12:18
Status : Hors ligne

Re: [R] Mettre une variable dans le nom d'une autre variable ?

#20

Message par Cyrille »

Je pense que tu devrais faire de l'algorithmique avant de continuer à programmer. C'est la base de la programmation, et si tu a un algorithme de prêt avant de commencer à programmer (même dans la tête) c'est plus facile. Tu sais exactement ce que tu veux et tu comprends plus rapidement la doc et tu peux plus facilement demander de l'aide.

Enfin c'est juste ce que je pense, je trouve que ça aide beaucoup au niveau logique. Moi depuis que je fais de l'algorithmique j'y arrive beaucoup plus facilement.

Aller bonne continuation et bon courage !
Répondre