Page 1 sur 1

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

Posté : dim. 14 déc. 2008 13:42
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 ;)

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

Posté : dim. 14 déc. 2008 16:34
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.

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

Posté : dim. 14 déc. 2008 18:56
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+

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

Posté : dim. 14 déc. 2008 23:04
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)

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

Posté : dim. 14 déc. 2008 23:18
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+

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

Posté : dim. 14 déc. 2008 23:38
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"

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

Posté : lun. 15 déc. 2008 07:53
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"

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

Posté : lun. 15 déc. 2008 08:12
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]).

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

Posté : lun. 15 déc. 2008 19:09
par sheen
Wow, merci beaucoup je pense que là je devrais trouver mon bonheur :D

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

Posté : mer. 17 déc. 2008 19:08
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 ^^

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

Posté : mer. 17 déc. 2008 22:42
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]]

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

Posté : jeu. 18 déc. 2008 14:02
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é.

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

Posté : jeu. 18 déc. 2008 22:08
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. ;)

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

Posté : jeu. 18 déc. 2008 23:49
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 ?

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

Posté : ven. 19 déc. 2008 00:14
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.

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

Posté : ven. 19 déc. 2008 01:01
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

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

Posté : ven. 19 déc. 2008 02:31
par sheen
Ca marche nickel.
Merci pour votre aide précieuse =)

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

Posté : ven. 19 déc. 2008 08:01
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

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

Posté : ven. 19 déc. 2008 09:27
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 =)

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

Posté : ven. 19 déc. 2008 09:36
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 !