Gestion des listes d'élements

Introduction

Il est souvent nécessaire d’utiliser des listes d’éléments dans les programmes. Bien qu’il soit assez aisé de coder leur accès en script shell, le code peut encore être simplifié, en éliminant les parties fastidieuses et répétitives. Ce module ne fournit qu’un petit ensemble de fonctions pour gérer cela, sans définir de nouveau concept.

Comme il vient d’être dit, nlist n’introduit pas de formalisme particulier concernant les listes, mais se base sur le concept existant en shell : une liste est une chaîne d’élément séparé par des white space. On peut donc toujours utiliser et manipuler les listes en dehors des fonctions décrites ici-même, sans aucune interférence.

Attention tout de même, car nlist se base sur les outils Unix standard en plus du langage shell, pour effectuer certaines actions ; mais nlist ne supporte pas (encore) une gestion complète de caractères séparateurs redéfinis. En effet, tous les outils Unix, ainsi que le shell, utilisent la variable d’environnement $IFS pour déterminer la séparation entre deux mots ; cette variable doit contenir au moins le caractère espace pour que nlist fonctionne correctement. Par ailleurs, d’autres caractères inclus dans $IFS pourraient interférer avec les éléments contenus dans la liste. Donc encore une fois, attention :-)

Les fonctions

nlist_count()

Affiche sur la sortie standard le nombre d’élements dans la liste.

synopsys

nlist_count <list>

* <list> le contenu d’une variable contenant une liste

valeurs de retour

  • 0 - ok
  • 200 - mauvais appel, vérifier le paramètre

utilisation

# une liste $list est alimentée (voir nlist_add)
count=`nlist_count "$list"`

nlist_add()

Ajoute (ou initialise) un ou plusieurs éléments à la fin d’une liste.

synopsys

nlist_add <list> <value> [<value> ..]
  • <list> le nom de la liste à laquelle ajouter le ou les éléments (attention: il faut bien indiquer le nom de la variable et non la variable référencée, entendre appeler nlist_add list valeur plutôt que //nlist_add “$list” valeur)
  • <value> l’élement à ajouter
  • <value> .. les éléments additionnels à ajouter (optionnel)

valeurs de retour

  • 0 - ok
  • 200 - mauvais appel, vérifier les paramètres

utilisation

# la variable $list n'existe pas encore
nlist_add list 'item1'
# $list existe désormais et contient 'item1'
nlist_add list 'item2' 'item3' 'item4'
# $list contient "item1 item2 item3 item4"

nlist_reverse()

Retourne une liste inversée des éléments d’une liste (le premier élément devient le dernier).

synopsys

nlist_reverse <list>
  • <list> la liste originale dont on veut l’inverse (l’original n’est pas modifié)

valeurs de retour

  • 0 - ok
  • 200 - mauvais appel, vérifier les paramètres

utilisation

nlist_add list a b c d
list2=`nlist_reverse "$list"`
# $list2 contient 'd c b a'

nlist_next()

Retourne l’élement suivant dans une liste.

synopsys

nlist_next <list> <current>
  • <list> la liste en question
  • <current> l’élement pour lequel déterminer le suivant

valeurs de retour

  • 0 - ok
  • 200 - mauvais appel, vérifier les paramètres

utilisation

nlist_add list a b c d
item_b=`nlist_next "$list" a`
item_d=`nlist_next "$list" c`
item_vide=`nlist_next "$list" d`

nlist_prev()

Retourne l’élement précédent dans une liste.

synopsys

nlist_prev <list> <current>
  • <list> la liste en question
  • <current> l’élement pour lequel déterminer le précédent

valeurs de retour

  • 0 - ok
  • 200 - mauvais appel, vérifier les paramètres

utilisation

nlist_add list a b c d
item_a=`nlist_prev "$list" b`
item_b=`nlist_prev "$list" c`
item_vide=`nlist_prev "$list" a`

nlist_loop()

synopsys

nlist_loop -l <list> [-f <from>] [-t <to>] [-r] -c <command> [-a <arg>]
  • -l <list> la liste contenant les élements à itérer
  • -f <from> omettre les éléments avant que <from> soit l’élément courant
  • -t <to> arêter l’itération lorsque <to> est atteind
  • -r effectuer l’itération en sens inverse (utilise nlist_reverse())
  • -c <command> la commande à exécuter à chaque itération; cette commande (programme, fonction, alias, peu importe) est appelée de la façon suivante : <command> <item> <previous> <next> <position> <total count> <argument>
    • <item> l’élément courant
    • <previous> élément précédent dans la liste (pas forcément celui qui vient d’être itéré)
    • <next> élément suivant dans la liste (pas forcément le prochain à être itéré)
    • <position> position numérique de l’élement courant dans la liste (démarre à 1)
    • <total count> nombre total d’éléments dans la liste (peut être plus que le nombre d’itération)
    • <argument> reflète l’argument passé à nlist_loop() avec le paramètre -a
  • -a <arg> argument qui doit être passé à chaque itération

valeurs de retour

  • 0 - ok
  • 200 - mauvais appel, vérifier les paramètres

utilisation

cmd () {
  echo "item: '$1'"
}
 
nlist_add list a b c d e
 
# a b c d e
nlist_loop -l "$list" -c cmd
# e d c b a
nlist_loop -l "$list" -r -c cmd
 
# b c d e
nlist_loop -l "$list" -f b -c cmd
# d c b a
nlist_loop -l "$list" -f d -r -c cmd
 
# b c d
nlist_loop -l "$list" -f b -t d -c cmd
# d c b
nlist_loop -l "$list" -r -f d -t b -c cmd

Usage

 
nlib_nlist.txt · Dernière modification: 24/05/2007 20:03 par riri
 
Recent changes RSS feed Creative Commons License Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki