[R] Accés à une variable type Array depuis une fonction

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
padawan1667
Niveau 1
Niveau 1
Messages : 3
Enregistré le : lun. 08 févr. 2010 21:12
Status : Hors ligne

[R] Accés à une variable type Array depuis une fonction

#1

Message par padawan1667 »

Bonjour,

Je suis débutant en language Autoit et malgrés mes recherches (docs, forums...) je n'arrive pas a trouver ce qui cloche dans mon script. C'est sans doute une erreur dans mon code mais je n'arrive pas à la déceller.
J'ai creer 2 fonctions pour accéder à un tableau à 2 dimensions.
La fonction pour modifier une valeur dans le tableau (udpVal) ne fonctionne pas.

une idée? d'avance merci.

Code : Tout sélectionner

#include <Array.au3>

global $Myarray[3][2]=[ _
            ["key0","val0"], _ 
            ["key1","val1"], _ 
            ["key2","val2"] _
            ]

Func getVal($Myarray,$key)
    $iKey = _ArraySearch($Myarray, $key)
    return $Myarray[$iKey][1]
EndFunc

Func updVal($Myarray,$key,$val)
    $iKey = _ArraySearch($Myarray, $key)
    ConsoleWrite("value for key " & $key & " before update : " & $Myarray[$iKey][1]& @LF)
    $Myarray[$iKey][1]=$val
    ConsoleWrite("new value : " & $Myarray[$iKey][1] & @LF)
    Return $Myarray[$iKey][1]
EndFunc

_ArrayDisplay($Myarray)

updVal($Myarray,"key2","valxxx")

_ArrayDisplay($Myarray)

ConsoleWrite("value for 'key2' is " & getVal($Myarray,"key2") & @LF)
 
la sortie console:

>"D:\autoit\SciTe\..\autoit3.exe" /ErrorStdOut "D:\autoit\Tests\dictFunc.au3"
value for key key2 before update : val2
new value : valxxx
value for 'key2' is val2
>Exit code: 0 Time: 2.549
Modifié en dernier par padawan1667 le mar. 09 févr. 2010 19:34, modifié 1 fois.
padawan1667
Niveau 1
Niveau 1
Messages : 3
Enregistré le : lun. 08 févr. 2010 21:12
Status : Hors ligne

Re: [..] Accés à une variable type Array depuis une fonction

#2

Message par padawan1667 »

Je m'auto-répond :D .
Je crois avoir trouver le 'truc' qui manque : Byref
'Byref' permet de lié la variable passé en paramétre de la fonction à la variable original.
Ainsi tout changement dans la fonction affectera la variable d'origine.

Ce qui donne dans mon code:

Code : Tout sélectionner

#include <Array.au3>

global $Myarray[3][2]=[ _
            ["key0","val0"], _ 
            ["key1","val1"], _ 
            ["key2","val2"] _
            ]

Func getVal(Byref $Myarray,$key)
    $iKey = _ArraySearch($Myarray, $key)
    return $Myarray[$iKey][1]
EndFunc

Func updVal(Byref $Myarray,$key,$val)
    $iKey = _ArraySearch($Myarray, $key)
    ConsoleWrite("value for key " & $key & " before update : " & $Myarray[$iKey][1]& @LF)
    $Myarray[$iKey][1]=$val
    ConsoleWrite("new value : " & $Myarray[$iKey][1] & @LF)
    Return $Myarray[$iKey][1]
EndFunc

_ArrayDisplay($Myarray)

updVal($Myarray,"key2","valxxx")

_ArrayDisplay($Myarray)

ConsoleWrite("value for 'key2' is " & getVal($Myarray,"key2") & @LF)

 
Résultat:

>"D:\autoit\SciTe\..\autoit3.exe" /ErrorStdOut "D:\autoit\Tests\dictFunc.au3"
value for key key2 before update : val2
new value : valxxx
value for 'key2' is valxxx
>Exit code: 0 Time: 4.351

J'ai juste dans la méthode? désolé j'suis un noob en dév!
Merci.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11798
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Accés à une variable type Array depuis une fonction

#3

Message par Tlem »

C'est dans votre cas la solution la plus simple. 8)

Si votre fonction ne gère qu'un seul tableau ($Myarray) et puisque celui-ci est déclaré en global, vous pourriez vous contenter de ceci :
► Afficher le texte
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é".
padawan1667
Niveau 1
Niveau 1
Messages : 3
Enregistré le : lun. 08 févr. 2010 21:12
Status : Hors ligne

Re: [..] Accés à une variable type Array depuis une fonction

#4

Message par padawan1667 »

Merci bien :D
Répondre