Page 1 sur 1

[UDF] Des Hashs dans Autoit

Posté : sam. 26 juil. 2014 16:50
par Zouzaka
Description :
Les Hashs sont une sorte d'array qui sont indexés non pas par des chiffres mais par des strings exemple :

Code : Tout sélectionner

$var = { "Bébé" => "Petit", "Homme" => "Grand"}
$var["Bébé"] #Renvoi: "Petit"
Bien qu'avec l'UDF, la syntaxe n'est pas la même, mais le principe est la :)
pour reprendre l'exemple précédant mais sous autoit :

Code : Tout sélectionner

Global $hash
_Hash_Creat($hash)
_Hash_Add($hash, "Bébé", "Petit")
_Hash_Add($hash, "Homme", "Grand")
_Hash_Find($hash, "Bébé") ;Renvoi: "Petit"
Telechargement :
Hash.au3
UDF
(4.93 Kio) Téléchargé 346 fois
List Des Fonctions :
_Hash_Creat
_Hash_Add
_Hash_Delete
_Hash_Find
_Hash_GetSize
_Hash_FindbyValue
_Hash_Verify

Re: Des Hashs dans Autoit

Posté : sam. 26 juil. 2014 19:29
par jchd
Il existe déjà les objets ScriptingDictionary et la prochaine release (la beta actuelle) offre le type natif Map permettant des clés de type chaîne ou entier associées à des valeurs de tout type AutoIt :

Code : Tout sélectionner

#include "..\include\dump.au3"

Local $myMap[]
$myMap.exemple = 123
$myMap["autre syntaxe"] = "pourquoi pas ?"
$myMap[504] = Binary("emploi d'une clé Int32")
$myMap.fct = _myFunc
$myMap["même en russe : Русское название"] = "abcdef"

Func _myFunc($s)
    _ConsoleWrite($s)
EndFunc

($myMap.fct)("Coucou !" & @LF)

_ConsoleWrite(_VarDump($myMap) & @LF)

Func _ConsoleWrite($s)
    ConsoleWrite(BinaryToString(StringToBinary($s, 4), 1))
EndFunc
 
et ça produit :

Code : Tout sélectionner

Coucou !
Map[5]
      ['exemple']      => Int32        123
      ['autre syntaxe'] => String       (14) 'pourquoi pas ?'
      [504]            => Binary       (22) 0x656D706C6F69206427756E6520636CE920496E743332
      ['fct']          => UserFunction _MYFUNC
      ['même en russe : Русское название'] => String       (6) 'abcdef'
 
Voir le fil de la beta sur le forum US pour plus d'informations.

Euh, désolé de faire un peu le rabat-joie, mais c'est pour apporter un plus et non dénigrer niaisement.

Re: Des Hashs dans Autoit

Posté : mer. 30 juil. 2014 15:45
par walkson
Bonjour,
Et comment fait on pour récupérer les valeurs de _Hash_Find et _Hash_FindbyValue ?
J'ai essayé comme ceci:
Global $hash
_Hash_Creat($hash)
_Hash_Add($hash, "Bébé", "Petit")
_Hash_Add($hash, "Homme", "Grand")
$bebe = _Hash_Find($hash, "Bébé")
MsgBox(0,"",$bebe) ;Renvoi: "Petit"
MsgBox(0,"",_Hash_FindbyValue($hash, "Petit"))
et dans les 2 cas, la valeur retournée est 0

Re: Des Hashs dans Autoit

Posté : mer. 30 juil. 2014 18:58
par RL77LUC
Bonjour,

Je ne comprends pas : Quel intérêt d'utiliser ta fonction plutôt que "Assign" et "Eval", qui font ça très bien ?

Quant au nom, c'est toi qui l'a inventé ? Parce que dans mon esprit, ce que tu fais s'appelle toujours un array (en tous cas, c'est comme ça en PHP), et un hash correspond plus à une fonction type MD5, SHA1, etc... Une sorte de "cryptage" irréversible (qui n'est donc pas du cryptage, mais je ne trouve pas meilleure définition).

Re: Des Hashs dans Autoit

Posté : mer. 30 juil. 2014 19:04
par orax
Pour le nom il fait référence à ça : http://www.autoitscript.fr/forum/viewto ... 955#p87955

Re: Des Hashs dans Autoit

Posté : mer. 30 juil. 2014 19:44
par jchd
RL77LUC a écrit :Je ne comprends pas
On voit ça.

Que ce soit un objet ScriptingDictionary, une Map AutoIt ou PHP, c'est toujours un conteneur de paires {clé, valeur} qui ne demande pas de redimensionnement sur insertion ou effacement et n'a (en général) pas d'ordre particulier.

Le domaine d'emploi n'est pas le même que celui des tableaux.

Par contre Assign et Eval n'ont qu'une utilité extrêmement restreinte (voire nulle) et sont à proscrire dans 99,999% des cas et perso je dirais 100%.

Re: Des Hashs dans Autoit

Posté : ven. 15 août 2014 00:59
par Zouzaka
J'ai corriger une petit erreur de ma part dans l'UDF :oops:
Sinon pourquoi opter pour cette UDF au lieu des divers fonction et autre moyen possibles? la raison est qu'il est possible d’enregistrer cette hash dans un fichier (comme une string) et de la réutiliser dans le langage ruby avec la fonction "eval" en fait c'est la principal raison pour la quelle j'ai créer cette UDF.
En espèrent avoir éclairci un peu sur le sujet

Re: [UDF] Des Hashs dans Autoit

Posté : ven. 15 août 2014 10:32
par walkson

Code : Tout sélectionner

_Hash_Creat($hash)
_Hash_Add($hash, "Bébé", "Petit")
_Hash_Add($hash, "Homme", "Grand")
$bebe = _Hash_Find($hash, "Bébé")
MsgBox(0,"",$bebe) ;Renvoi: "Petit"
$aa = _Hash_FindbyValue($hash, "Grand")
MsgBox(0,"aa",$aa)

Code : Tout sélectionner

" ==> Subscript used on non-accessible variable.:
Return StringReplace(StringReplace($sResu[0], "'", ""), "{", "")
Return StringReplace(StringReplace($sResu^ ERROR

Re: [UDF] Des Hashs dans Autoit

Posté : ven. 15 août 2014 11:59
par jchd
Sinon pourquoi opter pour cette UDF au lieu des divers fonction et autre moyen possibles? la raison est qu'il est possible d’enregistrer cette hash dans un fichier (comme une string) et de la réutiliser dans le langage ruby avec la fonction "eval" en fait c'est la principal raison pour la quelle j'ai créer cette UDF.
Tu peux faire exactement la même chose avec le type map, non ? D'accord c'est encore dans la beta mais Jon va nous ficeler une version production sous peu.
Idem avec un Scripting.Dictionary et ça c'est dispo depuis un bail.

Re: [UDF] Des Hashs dans Autoit

Posté : ven. 15 août 2014 14:39
par Zouzaka
la fonction "eval" dans ruby permet d'evaluer une string exemple :

Code : Tout sélectionner

$i = "[1,2,3]"
comme tu le vois "$i" est une string et non une array mais j'utilise "eval":

Code : Tout sélectionner

eval($i)
cela retournera une array contenant 1,2 et 3. meme chose avec les hashs ;)
donc si je fait :

Code : Tout sélectionner

$i = '{"Blop" => "Rouge"}'
eval($i)
eval retournera une hash et avec mon UDF il est possible de créer des hash tout en gardant une syntaxe
reconnaissable par ruby.

Walk, j'ai recorriger ca ;)

Re: [UDF] Des Hashs dans Autoit

Posté : ven. 15 août 2014 16:19
par jchd
Je n'ai pas dit que cela ne fonctionnait pas. Ma question est plutôt : "qu'est-ce qui t'empêche de faire la même chose avec un ScriptingDictionary ou un (nouveau, certes) type Map ?"

Parce que non seulement la vélocité n'est pas au rendez-vous, mais si soit une clé soit une valeur contient une virgule, ton UDF part à dame.
► Afficher le texte