FAQ RéseauxConsultez toutes les FAQ

Nombre d'auteurs : 4, nombre de questions : 55, dernière mise à jour : 8 octobre 2014  Ajouter une question

 

La FAQ réseaux avec toutes vos questions réponses


SommaireIRCLes Tables de Hachage (3)
précédent sommaire suivant
 

Une table de hachage est un tableau qui à une clé (typiquement une chaîne de caractère) associe une valeur.
Un exemple s'impose : Imaginons que je veuille stocker la date de naissance de tous mes amis. Et bien sans les tables de hachage, laissez moi vous dire que vous avez intérêt à ne pas avoir beaucoup d'amis.
C'est simple, vous avez deux solutions : soit l'on crée une variable pour chaque personne (%agesophie, %ageeric...), soit on fait une variable globale contenant toutes les dates et puis on fait appel aux tokens.
Pour le second cas, vous avez intérêt à avoir une bonne mémoire pour vous rappeler que la date de naissance de machin est en troisième position, celle de truc en 5ème...
Pour le premier cas, vous avez compris le problème...

La solution, c'est la table de hachage ! Voici comment ça va se présenter :

Code : Sélectionner tout
1
2
3
4
Sophie -> 23 12 88 
Eric -> 12 03 87 
Loïc -> 03 02 85 
...
Simple et efficace ! Un autre avantage ? Vous ne trouverez pas dans mIRC un moyen plus rapide pour accéder à une donnée ! Pourquoi ? Parce que les tables de hachage sont chargées dans la mémoire vive (très rapide).
Ainsi leur utilisation accélère le fonctionnement de votre script. Je vous recommande donc d'user et d'abuser de ces petites merveilles.

Mis à jour le 20 décembre 2013 ram-0000

Pour créer une hashtable :

Code : Sélectionner tout
/hmake -s <nom> N
L'attribue -s est facultatif, il sert à afficher dans la fenêtre de statut que la table a bien été créée. N est un entier donnant la taille de la table, mais pas en nombre d'items... Retenez juste que pour une table de 1000 éléments, une valeur de 100 est suffisante.
Code : Sélectionner tout
/hmake hashtable 10
Pour ajouter une clé et sa valeur à la table :
Code : Sélectionner tout
/hadd <nom de la table> <clé> <valeur>
Aucun attribut n'est à retenir.
Pour supprimer une clé :
Code : Sélectionner tout
/hdel <nom de la table> clé
Pour incrémenter ou décrémenter une valeur numérique :
Code : Sélectionner tout
/hinc <nom> <clé> et /hdec <nom> <clé>
Pour sauvegarder une table de hachage :
Code : Sélectionner tout
/hsave <nom de la table> <nom du fichier>
exemple
Code : Sélectionner tout
/hsave hashtable hashtable.txt
2 attributs utiles : -a pour écrire après les données déjà sauvegardée (si le fichier existait déjà avant) et -o pour réécrire par dessus.
Pour charger une table précédemment sauvegardée :
Code : Sélectionner tout
/hload <nom de la table> <nom du fichier>
Important : la table qui contiendra les données doit avoir été précédemment déclarée via hmake.
exemple
Code : Sélectionner tout
//hmake table 10 | hload table hashtable.txt
A noter qu'il n'y a aucune correspondance entre le nom de la table et le nom du fichier.
Enfin, pour supprimer une table de la mémoire vive, il faut utiliser :
Code : Sélectionner tout
/hfree <nom de la table>
Si l'on rajoute l'option -w, le nom de la table pourra comporter des jokers.
N'oubliez pas de vider la mémoire vive une fois que vous n'utilisez plus une table de hachage ! Si vous ne le faites pas, en plus de vous encombrer, vous ne pourrez plus créer une table du nom de celle que vous venez de fermer, ce qui peut être gênant quand on a plusieurs alias se servant de la même table...

Mis à jour le 20 décembre 2013 ram-0000

Passons aux fonctions permettant d'utiliser les hashtables.
Il n'y en a que trois: $hget ; $hmatch et $hfind, mais elles peuvent utilisée de bien des façons.
On commence par $hget() qui permet de retrouver la valeur d'une clé.

Code : Sélectionner tout
$hget(<nom de la table>,<clé>)
Retournera donc la valeur correspondant à la clé. A noter que <nom de la table> peut être remplacé par un entier, dans ce cas mIRC ira chercher dans la nième table.
Si vous voulez tester l'existence d'une table de hachage, la fonction $hget(<nom de la table>) retournera le nom de la table si elle existe, la chaîne vide ($null) sinon. Ca peut être utile.
Moins important, si l'on remplace <nom de la table> par un entier la fonction retourne le nom de la nième table.
Passons à $hmatch(). Elle permet de retrouver le nom d'une clé.
Code : Sélectionner tout
$hmatch(<nom de la table>,<chaîne avec jokers>,<n>)
Retourne la nième clé contenant la chaîne. Si n vaut 0, la fonction retourne le nombre de clé contenant la chaîne. Il vaut mieux encadrer la chaîne avec des * (comme dans on 1:*text*)
exemple
Code : Sélectionner tout
$hmatch(<nom de la table>,*,0)
Retournera le nombre de clés présentes dans la table, ce qui peut être très utile...
Les fonction $hget() et $hmatch() se combinent très bien !
Code : Sélectionner tout
$hget(<nom de la table>,$hmatch(<nom>,<chaîne>,<n>)
permettent donc de rechercher dans la table la valeur de la nième clé contenant chaîne.
La fonction $hmatch() permet aussi de rechercher dans les données plutôt que dans les clés (mais elle retournera toujours une clé) grâce à un .data après la parenthèse fermante.
Enfin, $hfind est équivalente à $hmatch() (en réalité dans la documentation on ne trouve pas la présentation de $hmatch() mais celle de $hfind(), mais je vous rassure, $hmatch() fonctionne très bien aussi)...

Mis à jour le 20 décembre 2013 ram-0000

Proposer une nouvelle réponse sur la FAQ

Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour ça


Réponse à la question

Liens sous la question
précédent sommaire suivant
 

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2019 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

 
Responsable bénévole de la rubrique Réseau : chrtophe -

Partenaire : Hébergement Web