Dilib, module StrDict, type StrDict : Différence entre versions
imported>Jacques Ducloy (→StrDictNext) |
imported>Jacques Ducloy (→Ajout d'éléments) |
||
Ligne 143 : | Ligne 143 : | ||
==Ajout d'éléments== | ==Ajout d'éléments== | ||
+ | A partir de la version V06.36, plusieurs types de valeurs sont prises en compte. | ||
===Valeurs de type chaîne=== | ===Valeurs de type chaîne=== | ||
====<code>StrDictAddNewDatum</code>==== | ====<code>StrDictAddNewDatum</code>==== | ||
Ligne 195 : | Ligne 196 : | ||
char *StrDictSetChar(StrDict *t, char *k1, char c1); | char *StrDictSetChar(StrDict *t, char *k1, char c1); | ||
</source> | </source> | ||
+ | |||
==Manipulations globales== | ==Manipulations globales== | ||
===<code>StrDictAddFromFile</code>=== | ===<code>StrDictAddFromFile</code>=== |
Version du 27 août 2020 à 14:20
Module StrDict |
Le type StrDict implémente un tableau associatif.
Liste des modules Dilib
|
Constructeurs
StrDictCreate
#include "StrDict.h"
StrDict *StrDictCreate(int number, int incr);
Les paramètres number et incr optimisent les allocations mémoires. number est une approximation du nombre d'éléments de la table.
Le paramètre incr donne le nombre d'entrées à allouer à chaque fois qu'une demande d'ajout provoque une extension de la table. S'il est nul, la table est augmentée de 25 % à chaque dépassement.
StrDictFromFile
Cette fonction crée une table de type StrDict en lisant le fichier dont le nom est donné en paramètre.
#include "StrDict.h"
StrDict *StrDictFromFile(char *stream);
- Exemple
#include "StrDict.h"
StrDict *myTable;
...
int getopt();
extern char *optarg;
main(int argc, char **argv)
{
int cOption;
while((cOption=getopt(argc,argv,"t:"))!=EOF)
{switch (cOption)
{
case 't' :
myTable=StrDictFromFile(optarg);
break;
}
}
...
}
NewStrDict
#include "StrDict.h"
StrDict *NewStrDict();
Destructeurs
Le type StrDict possède 3 destructeurs.
SrtDictFree
Le destructeur SrtDictFree()
libère l'espace de la table (et seulement de la table). Les clés et valeurs ne sont pas effacées.
#include "StrDict.h"
void StrDictFree(StrDict* dictToFree);
SrtDictFreeKey
Le destructeur SrtDictFreeKey()
libère l'espace de la table et des clés associées à chaque élément.
StrDictFreeStr
Le destructeur SrtDictFreeStr()
libère l'espace de la table, celui des clés associées à chaque élément, et celui des valeurs.
Accès et itérateurs
Les éléments d'un dictionnaire peuvent être accédés par clé, ou de façon séquentielle, par un itérateur.
Plus précisément une position courante est gérée par la table.
StrDictSearch
char *StrDictSearch(StrDict *dict, char *key);
Cette fonction cherche dans le tableau la valeur associées à la clé demandée et la renvoie. Elle renvoie un pointeur NULL si la clé est absente du tableau. La clé trouvée devient la nouvelle position courante.
- Exemple
....
char *populationFrance;
StrDict *tablePopulationMonde;
...
populationFrance=StrDictSearch(tablePopulationMonde, "France");
StrDictKey
Cette fonction retourne la clé courante associée à la position cournate du dictionnaire dict.
StrDictFirst
Cette fonction retourne la clé la plus basse de la table. Le premier élément devient la position courante.
char *StrDictFirst(StrDict *dict);
StrDictKeyLessEqual
Cette fonction retourne la clé de l'enregistrement dont la clé est égale au paramètre key, ou qui lui est immédiatement inférieure en cas d'échec. Elle retourne NULL en cas d'échec.
La valeur associée à la clé peut être obtenue par StrDictValue.
char *StrDictKeyLessEqual(StrDict *dict, char*key);
StrDictIteratorReset
Cette fonction réinitialise l'itérateur (avant le premier enregistrement).
void StrDictIteratorReset(StrDict *dict);
StrDictNext
Cette fonction fait progresser l'itérateur d'un élément. Celui ci devient l'élément courant et la fonction en retourne la clé.
char* StrDictNext(StrDict *dict);
- Exemple
Impresssion de l'ensemble du contenu d'un tableau.
StrDictIteratorReset(myTable);
while ((key=StrDictNext(myTable)))
{
printf("La valeur associé à %s est %s", key, StrDictValue(myTable));
}
StrDictPrevious
Cette fonction fait reculer d'un élément l'élément courant et en retourne la clé.
void StrDictNext(StrDict *dict);
StrDictValue
Cette fonction retourne la valeur de l'élément courant. Attention, elle ne donne un résultat que dans un conteste itératif.
void StrDictValue(StrDict *dict);
Ajout d'éléments
A partir de la version V06.36, plusieurs types de valeurs sont prises en compte.
Valeurs de type chaîne
StrDictAddNewDatum
Cette fonction est à utiliser pour ajouter un nouveau couple (clé, valeur) à la table.
- Synopsis
char *StrDictAddNewDatum(StrDict *t, char *k1, char *v1);
Les chaînes clé et valeur sont manipulées par des pointeurs et ne sont pas recopiées. La gestion de leurs allocations relève du programme appelant.
Le couple « k1 v1 » est ajouté à la table sans vérifier la présence de la clé dans la table.
Cette fonction est une translittération de StrSearchAdd.
StrDictSet
Cette fonction ajoute un nouveau couple (clé, valeur) à la table ou modifie la valeur associée à la clé si elle est présente dans la table.
- Synopsis
char *StrDictSet(StrDict *t, char *k1, char *v1);
Cette fonction est une translittération de StrSearchPut.
- Attention
Comme pour la fonction StrDictAddNewDatum
cette fonction ne manipule que des pointeurs sur la clé (k1) et la valeur (v1).
Dans le cas d'une boucle sur des données volatiles (flot de données par exemple) il faut utiliser des mécanismes comme strdup, exemple :
StrDict *table;
...
while()
{
char *key;
...
if ((clé=SxmlLeafText( ... )))
{
StrDictSet (table, strdup(key), ...);
}
}
Valeurs de type caractère
StrDictAddNewDatumChar
Cette fonction est à utiliser pour ranger un datum contenant une valeur de type caractère.
char *StrDictAddNewDatumChar(StrDict *t, char *k1, char c1);
StrDictSetChar
Cette fonction est à utiliser pour ranger une valeur de type caractère.
char *StrDictSetChar(StrDict *t, char *k1, char c1);
Manipulations globales
StrDictAddFromFile
StrDict *StrDictAddFromFile (StrDict *table, char*stream);
Exemple d'emploi :
if (!persWikiDict) persWikiDict=StrDictFromFile(optarg);
else StrDictAddFromFile(persWikiDict, optarg);