Page 1 sur 1
Convertir chaine de caractère en nom de variable
Posté : lun. 25 juil. 2016 00:45
par ArkhaDae
Bonjour,
J'aimerais "appeler" des variables sans avoir à les énumérer toutes une par une, je m'explique:
Je crée une chaine de caractère : "Case10"
Il faudrait que le scrpit me prenne en compte cette chaine de caractère en tant qu'un nom de variable, car j'aimerais par exemple faire par la suite Case10=523
En espérant avoir été clair, j'attends vos réponses avec impatiente
Bonne soirée
Re: Convertir chaine de caractère en nom de variable
Posté : lun. 25 juil. 2016 00:54
par orax
La fonction Eval()
?
Re: Convertir chaine de caractère en nom de variable
Posté : lun. 25 juil. 2016 01:56
par jchd
C'est toujours une mauvaise idée que rien ne justifie, qui complique inutilement et rend moins efficace du code qui devrait rester clair.
Re: Convertir chaine de caractère en nom de variable
Posté : lun. 25 juil. 2016 08:40
par jguinch
La fonction est plutôt Assign. Mais comme le dit JC, peu (voir aucun) cas ne justifie une telle utilisation.
Voir plutôt l'utilisation de tableaux.
Re: Convertir chaine de caractère en nom de variable
Posté : lun. 25 juil. 2016 12:17
par ArkhaDae
Effectivement j'avais essayé avec eval mais sans succès, surrement dû à une erreur de ma part
Je ne sais pas pourquoi j'avais complétement oublié les tableaux qui pour ce script le rendrait beaucoup beaucoup plus simple
Merci en tout cas de votre aide c'est un réel plaisir de pouvoir compter sur vous

Re: Convertir chaine de caractère en nom de variable
Posté : lun. 25 juil. 2016 12:56
par ArkhaDae
Désolé pour le double post qui risque d'être HS comme c'est un problème de GUI
Mon problème est dans les noms de label, j'ai 16 label qui correspondent à chaque case de mon tableau (4x4)
Donc au début je crée le tableau dans la gui: GUICtrlCreateLabel($L[$j],100+$j*40,35+$i*15,15,15) avec deux boucles for.
Le problème c'est quand je veux mettre à jour les données en utilisant :GUICtrlSetData, il me faudrait le nom de chaque label or j'ai pas envie de créer à la main les 16 noms de label et donc j'aimerais savoir s'il y a un moyen de les créer en même temps que je crée mes label
(sinon je peux continuer à créer des label par dessus mais j'aimerais tout de même éviter)
Merci d'avance pour vos réponses, sur ce bon ap'
Re: Convertir chaine de caractère en nom de variable
Posté : lun. 25 juil. 2016 19:49
par jchd
Deux possibilités "propres" : un Map (tableau associatif) permettant d'assigner un nom ou une valeur quelconque (sauf entier 64 bits) à chaque contrôle, donc avec un fonctionnement proche de ASSIGN, ou un simple tableau 4x4 où l'on place les identificateurs.
Les variables Map ne sont disponibles que sous la beta, mais depuis le temps qu'elle est beta et qu'il n'y a pas de problème signalé on peut la considrer comme solide.
Recréer les labels sans détruire les anciens provoquerait une fuite mémoire à terme, donc à proscrire.
Code : Tout sélectionner
Local $aLabelList = [ _
"Pot au feu", _
"Chilli con carne", _
"Charlotte aux pommes", _
"Avocat aux crevettes", _
"Poulet grillé", _
"Lasagnes", _
"Salade de fruits", _
"Crêpe suzette", _
"Homard grillé", _
"Salade de tomates", _
"Purée maison", _
"Pomme flambée", _
"Melon au Porto", _
"Assiete de charcuterie", _
"Sole meunière", _
"Osso buco" _
]
; version tableau 4x4
Local $aLabelId[4][4]
; ...
For $i = 0 To 3
For $j = 0 To 3
$aLabelId[$i][$j] = GUICtrlCreateLabel($aLabelList[4 * $i + $j], 100 + $j * 40, 35 + $i * 15, 15, 15)
Next
Next
; ...
GUICtrlSetData($aLabelId[1][3], "Nouveau libellé")
; version Map
Local $mLabel[]
; ...
For $i = 0 To 3
For $j = 0 To 3
$mLabel[$aLabelList[4 * $i + $j]] = GUICtrlCreateLabel($aLabelList[4 * $i + $j], 100 + $j * 40, 35 + $i * 15, 15, 15)
Next
Next
; ...
GUICtrlSetData($mLabel["Crêpe suzette"], "Nouveau libellé")
Re: Convertir chaine de caractère en nom de variable
Posté : mar. 26 juil. 2016 20:20
par ArkhaDae
Bien, merci beaucoup pour ton aide qui a résolu mon problème

PS: ca facilite carrement l'affichage c'est cool :p