Alors que je cherchais autre chose, je suis tombé sur ceci :
► Afficher le texte
Tables
Une table est une variable contenant une série d'éléments de donnée, chacun consistant en une paire clé/valeur. Un élément ne peut être atteint que par sa clé, qui peut être une chaîne ou un nombre entier. Cependant une clé de type nombre entier n'est pas relative à une position de l'élément dans la table - les éléments ne sont pas dans un ordre défini et ne peuvent pas être triés. Les clés de type chaîne, presque exclusivement dans AutoIt, sont sensibles à la casse - "MyKey" n'est pas la même clé que "mykey".
Un exemple:
Vous voulez stocker un certain nombre de variables dans une collection de sorte que vous puissiez les passer à une fonction comme un seul paramètre. L'utilisation d'une table vous permet d'utiliser des clés de type chaîne pour faire des références à la valeur contenue - tels que les ControlIDs d'une série de contrôles indexés par leurs noms. Notez que les éléments peuvent être adressés soit par [] soit par '.':
Local $mControls[]
$mControls["Input"] = GUICtrlCreateInput(....)
$mControls.Combo = GUICtrlCreateCombo(...)
$mControls["Button"] = GUICtrlCreateButton(...)
Pour accéder à une valeur spécifique d'une table, vous utilisez la clé - la notation utilisée n'a pas besoin d'être celle utilisée initialement:
$idControlID = $mMap.Input ; Variable qui contient le ControlID pour Input
$idControlID = $mMap["Combo"] ; Variable qui contient le ControlID pour le Combo
Les clès de type nombre entier doivent utiliser la notation [] et ne sont pas les mêmes que leur équivalent chaîne:
$mMap[3] = "Integer 3" ; Ces clés sont différentes
$mMap["3"] = "String 3"
Les tables doivent être déclarées avant d'être utilisées, en définissant leur portée avec un des mot-clés 'Global/Local/Static'.
Local $mControls[]
Types de donnée dans les tables
L'élément d'une table peut contenir n'importe quel type de donnée d'AutoIt:
$mMap["Integer"] = 1
$mMap.Boolean = True
$mMap["String"] = "Texte"
$mMap.Array = $aArray
$mMap["Map"] = $mAnotherMap
Une table interne peut être atteinte directement:
Local $mInternal[] ; Déclare une table
$mInternal["Internal"] = "AutoIt3" ; Assigne un élément
Local $mContainer[] ; Déclare une table conteneur
$mContainer.Bin = $mInternal ; Assigne la première table comme un élément
; Toutes les valeurs suivantes sont "AutoIt3"
$sString = $mContainer["Bin"]["Internal"]
$sString = $mContainer.Bin.Internal
$sString = $mContainer["Bin"].Internal
$sString = $mContainer.Bin["Internal"]
Mais rien de cela dans la documentation en anglais.
Je ne parviens pas non plus à l'utiliser, j'ai pourtant la dernière version d'AutoIt.
Est-ce une erreur ? Une anticipation sur une prochaine version ? Ou juste moi qui suis incapable de faire fonctionner cela correctement.
C'est prévu pour la prochaine version, mais c'est déjà disponible dans la version bêta*. C'est donc normal que ça ne marche pas avec la version stable (3.3.14.2).
C'est un peu une alternative à Scripting.Dictionary.
Je plussoie les dires d'Orax.
D'ailleurs si vous regardez sur la page principale la version indiquée est différente de la dernière version stable d'AutoIt. ^^
Bonne soirée.
Envoyé de mon appareil mobile en utilisant Tapatalk
J'avais cherché le numéro de version sur la page en elle-même, étant tombé sur cette page par hasard, je n'ai pas pensé à aller voir la page principale.
Je ne connaissais pas Dictionnary Object, mais on dirait que ça ressemble un peu à un objet Java dans son fonctionnement.
Je n'utilise les versions béta que de mes propres programmes, mais cette évolution me semble très intéressante pour ne plus être obligé d'utilisé des tableaux quand cela n'est pas approprié.
Bonjour.
La version bêta actuelle 3.3.15.0 de Juillet 2015 a été téléchargé (à l'heure ou j’écris ce message) 4615 fois !
A première vue pas énormément de retour sur plus de bogues que la version actuelle. Donc elle devrait faire l'affaire aussi bien que la 3.3.14.2. ^^
Sur les conseils de Tlem, j'ai installé la version béta.
Et j'avoue que ça m'a changé la vie dans l'organisation de mon code, même si on peut vite se faire avoir avec le nom des valeurs.
J'ai maintenant suffisamment avancé dans mon programme pour en faire un exe.
Le problème c'est que j'apprécie de pouvoir mettre des icônes sur mes exe afin de donner un peu de joie dans ce monde de brute.
Enfin bref, pour mettre une icône je suis de faire une compilation "avec option", mais le programme compilé ne fonctionne pas, justement à cause des tables (variable subscript badly formatted => cruelle ironie du sort) et si je compile en béta, le programme fonctionne mais il n'y a pas d'icône, alors même que l'option "#AutoIt3Wrapper_Icon=" figure bien dans mon fichier.
Y a-t-il un moyen quand même d'ajouter une icône ou pas ?
J'ai essayé de compiler le script en lançant manuellement "Aut2exe.exe".
Malheureusement, une fois l'exe compilé le message d'erreur lié au table est apparu.
J'ai donc recompilé mon programme avec le compilateur béta et cette fois l'icône apparaît.
Je ne comprends pas mais tant mieux.