[UDF] Des Hashs dans Autoit

Partagez des fonctions et des UDF AutoIt.
Règles du forum
.
Répondre
Avatar du membre
Zouzaka
Niveau 4
Niveau 4
Messages : 50
Enregistré le : mer. 18 sept. 2013 13:03
Status : Hors ligne

[UDF] Des Hashs dans Autoit

#1

Message 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é 303 fois
List Des Fonctions :
_Hash_Creat
_Hash_Add
_Hash_Delete
_Hash_Find
_Hash_GetSize
_Hash_FindbyValue
_Hash_Verify
Modifié en dernier par Zouzaka le ven. 15 août 2014 14:31, modifié 4 fois.
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2272
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: Des Hashs dans Autoit

#2

Message 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.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: Des Hashs dans Autoit

#3

Message 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
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Avatar du membre
RL77LUC
Niveau 5
Niveau 5
Messages : 173
Enregistré le : mar. 21 sept. 2010 16:54
Status : Hors ligne

Re: Des Hashs dans Autoit

#4

Message 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).
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: Des Hashs dans Autoit

#5

Message par orax »

Pour le nom il fait référence à ça : http://www.autoitscript.fr/forum/viewto ... 955#p87955
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2272
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: Des Hashs dans Autoit

#6

Message 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%.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Avatar du membre
Zouzaka
Niveau 4
Niveau 4
Messages : 50
Enregistré le : mer. 18 sept. 2013 13:03
Status : Hors ligne

Re: Des Hashs dans Autoit

#7

Message 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
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: [UDF] Des Hashs dans Autoit

#8

Message 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
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2272
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [UDF] Des Hashs dans Autoit

#9

Message 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.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Avatar du membre
Zouzaka
Niveau 4
Niveau 4
Messages : 50
Enregistré le : mer. 18 sept. 2013 13:03
Status : Hors ligne

Re: [UDF] Des Hashs dans Autoit

#10

Message 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 ;)
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2272
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [UDF] Des Hashs dans Autoit

#11

Message 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
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Répondre