Dilib, module StrSearch

De Wicri Outils
LogoDilib.gif
Panneau travaux.png
Bibliothèque Dilib (ressources numériques)
Module StrSearch

Le module StrSearch permet de gérer des tableaux associatifs (appelés StrSearchTables) de chaînes de caractères (mais on peut y mettre des valeurs de types différents, en utilisant le cast de C).

Ces tableaux associent donc une clé et une valeur. Ils permettent une recherche rapide par clé (et non par indice entier). Typiquement, ils peuvent servir à créer un dictionnaire (un mot en français associé à sa traduction en anglais).

logo travaux Ce module est en cours de renommage en StrDict.

Constructeurs

StrSearchTableCreate
crée un tableau associatif dont la taille initiale (nombre d'éléments) est donnée, ainsi que l'incrément.
       StrSearchTable* StrSearchTableCreate(int size, int increment);
StrSearchGetTable
crée un tableau et le remplit des éléments contenus dans un fichier. Chaque ligne contient un élément. Un élément contient soit une clé seule, soit une clé séparée de la valeur associée par une tabulation.
StrSearchGetTableC
fait la même chose que StrSearchGetTable, mais transcode les valeurs avec CharSetCtoA.
StrSearchGetTableFromFile
crée un tableau d'après le contenu d'un fichier texte formatté. Ce format est le même que celui fourni par StrSearchTableToFile.
StrSearchTableReset
remet le tableau à zéro, qui peut être utilisé comme un tableau à peine créé. Aucune libération n'est effectuée.

Opérateurs

StrSearchAdd
Ajoute un couple clé-valeur au tableau. La valeur peut être de n'importe quel type (il suffit d'utiliser le transtypage du C). Attention, seuls les pointeurs de la clé ou de la valeur sont insérés dans la table.
StrSearchPut
Ajoute un couple clé-valeur au tableau, ou si la clé y existe déjà, modifie la valeur de l'élément existant. Attention, seuls les pointeurs de la clé ou de la valeur sont insérés dans la table.
StrSearch
cherche dans le tableau la valeur associées à la clé demandée et la renvoie. Renvoie un pointeur nul si la clé est absente du tableau.
StrSearchTableToFile
sauve le contenu du tableau dans un fichier texte formaté contenant une ligne par élément. Ces éléments peuvent n'être composés que d'une clé, ou bien d'un couple clé-valeur (la valeur étant séparée de la clé par une tabulation).
StrSearchAddTable
ajoute de nouveaux éléments venant d'un flux d'entrée à un tableau existant. Clé et valeurs doivent être sur une seule ligne, séparés par une tabulation. Si la valeur n'est pas présente, seule la clé est ajoutée.

Itérateurs

StrSearchIteratorReset
réinitialise l'itérateur (avant le premier enregistrement).
StrSearchIteratorReverseReset
réinitialise l'itérateur (après le dernier enregistrement).
StrSearchNext
renvoie la clé du prochain enregistrement.
StrSearchPrevious
renvoie la clé du précédent enregistrement.
StrSearchKey
renvoie la clé de l'enregistrement courant (sur lequel se trouve l'itérateur).
StrSearchValue
renvoie la valeur de l'enregistrement sur lequel se trouve l'itérateur.
StrSearchKeyLessEqual
cherche un enregistrement dont la clé est inférieure ou égale à la chaîne cherchée. Renvoie la clé de l'enregistrement trouvé. Place l'itérateur sur cet enregistrement.

Destructeurs

StrSearchTableFree
ferme le tableau et libère les structures associées (seuls les pointeurs sont ainsi libérés).
StrSearchTableFreeStr
ferme le tableau et libère les structures associées, ainsi que toutes les chaînes de caractères (clés et valeurs) qui doivent être de type char *.
StrSearchTableFreeKey
ferme le tableau, libère les structures associées, ainsi qu'uniquement les clés qui sont supposées du type char *.
StrSearchTableFreeValue
ferme le tableau, libère les structures associées, ainsi qu'uniquement les valeurs (supposées être du type char *).

Exemple

       #include "StrSearch.h"

       main() {
        StrSearchTable *table;
        table = StrSearchTableCreate(10,5);

        StrSearchAdd(table,"arbre","tree");
        StrSearchAdd(table,"maison","home");
        printf("%s\n", StrSearch(table,"arbre"));    /* prints tree */
        printf("%s\n", StrSearch(table,"route"));    /* prints (null) */

        StrSearchAdd(table,"chien","dog");
        printf("%s\n", StrSearch(table,"chien"));   /* sorts table and prints dog */
        ...  
        }

Correspondances avec StrDict

StrSearch StrDict
StrSearchTable * StrDict *
StrSearchTableFree() StrDictFree()
StrSearchAdd() StrDictAddNewDatum()
StrSearchPut() StrDictSet()
StrSearch() StrDictSearch()
StrSearchAddTable (char *stream, StrSearchTable *table) StrDictAddFromFile (StrDict *table, char*stream)
StrSearchTableCreate(int s,int i) StrDictCreate(int s, int i)
NewStrDict()
StrSearchGetTable(char *stream, int size) StrDictFromFile (char *stream)