lundi 24 septembre 2012

Clipper - Gestion des Hash sous Harbour

Introduction
Les Hash (Hash Table) sont des structures qui, typiquement, permettent d'implémenter des dictionnaires.
Les dictionnaires permettent d'enregistrer des pairs CLE = VALEUR dans une liste... c'est pratique à de nombreux égards.

Le grand avantage d'un dictionnaire, c'est que l'on peut y lire une valeur grâce à une syntaxe simplifiée

ma_valeur := Le_dictionnaire[ "la_cle" ]

Un rapide coup d'oeil sur les fonctions Harbours
Voici quelques bouts de code ci-et-là qui permettent de se familiariser avec les instructions relatives au Hash.

 IF hb_isHash( xData ) .AND. hb_hHasKey( xData, "Today" )
      OutStd( xData[ "Today" ], hb_eol() )
   ENDIF

Il est possible de créer un hash grâce à l'instruction:
hParams := hb_Hash()

Mais j'ai le sentiment que l'instruction suivante produit aussi un Hash:
LOCAL hData := {=>}

Le fichier de compatibilité de Harbour (hbcompat.ch) nous apprend qu'il existe de nombreuses autre fonctions utilitaires autour des Hash:
   #xtranslate hb_HASH([<x,...>])          => HASH(<x>)
   #xtranslate hb_HHASKEY([<x,...>])       => HHASKEY(<x>)
   #xtranslate hb_HPOS([<x,...>])          => HGETPOS(<x>)
   #xtranslate hb_HGET([<x,...>])          => HGET(<x>)
   #xtranslate hb_HSET([<x,...>])          => HSET(<x>)
   #xtranslate hb_HDEL([<x,...>])          => HDEL(<x>)
   #xtranslate hb_HKEYAT([<x,...>])        => HGETKEYAT(<x>)
   #xtranslate hb_HVALUEAT([<x,...>])      => HGETVALUEAT(<x>)
   #xtranslate hb_HVALUEAT([<x,...>])      => HSETVALUEAT(<x>)
   #xtranslate hb_HPAIRAT([<x,...>])       => HGETPAIRAT(<x>)
   #xtranslate hb_HDELAT([<x,...>])        => HDELAT(<x>)
   #xtranslate hb_HKEYS([<x,...>])         => HGETKEYS(<x>)
   #xtranslate hb_HVALUES([<x,...>])       => HGETVALUES(<x>)
   #xtranslate hb_HFILL([<x,...>])         => HFILL(<x>)
   #xtranslate hb_HCLONE([<x,...>])        => HCLONE(<x>)
   #xtranslate hb_HCOPY([<x,...>])         => HCOPY(<x>)
   #xtranslate hb_HMERGE([<x,...>])        => HMERGE(<x>)
   #xtranslate hb_HEVAL([<x,...>])         => HEVAL(<x>)
   #xtranslate hb_HSCAN([<x,...>])         => HSCAN(<x>)
   #xtranslate hb_HSETCASEMATCH([<x,...>]) => HSETCASEMATCH(<x>)
   #xtranslate hb_HCASEMATCH([<x,...>])    => HGETCASEMATCH(<x>)
   #xtranslate hb_HSETAUTOADD([<x,...>])   => HSETAUTOADD(<x>)
   #xtranslate hb_HAUTOADD([<x,...>])      => HGETAUTOADD(<x>)
   #xtranslate hb_HALLOCATE([<x,...>])     => HALLOCATE(<x>)
   #xtranslate hb_HDEFAULT([<x,...>])      => HDEFAULT(<x>)

Aucun commentaire: