Lsearch

From Base de connaissances eggdrops & TCL
Jump to: navigation, search

lsearch - Recherche un élément particulier dans une liste.

Syntaxe

lsearch ?''mode''? ''list pattern''

Description

Cette commande recherche les éléments de list pour voir si l'un d'eux correspond à pattern. Si c'est le cas, la commande retourne l'index du premier élément correspondant. Sinon, la commande retourne -1. L'argument mode indique comment les éléments de la liste doivent correspondre à pattern et il doit avoir une des valeurs suivantes:

  • -all : Retourne toutes les occurences dans la liste donnée plutot que le premier élément trouvé.
  • -ascii : La liste est traitée comme une chaîne Unicode. Cette option n'a vraiment de sens que lorsqu'elle est couplée à -exact ou -sorted.
  • -decreasing : Les éléments de la liste sont triés dans l'ordre décroissant. Cette option n'a vraiment de sens que lorsqu'elle est utilisée avec -sorted.
  • -dictionnary : Les éléments de la liste sont comparés en utilisant les comparaisons de type dictionnaire. Cette option n'a vraiment de sens que lorsqu'elle est couplée à -exact ou -sorted.
  • -exact : L'élément de la liste doit contenir exactement la même chaîne que pattern.
  • -glob : Pattern est un modèle glob-style qui est comparé à chaque élément de liste en utilisant les mêmes règles que la commande string match.
  • -increasing : Les éléments de la liste sont triés dans l'ordre croissant. Cette option n'a vraiment de sens que lorsqu'elle est utilisée avec -sorted.
  • -inline : Retourne les éléments de la liste plutôt que leur index dans la liste de recherche.
  • -integer : Les éléments de la liste sont traités comme des entiers. Cette option n'a vraiment de sens que lorsqu'elle est couplée à -exact ou -sorted.
  • -not : Cette option inverse la recherche et retourne la position du premier élément ne correspondant pas à la recherche.
  • -real : Les éléments de la liste sont traités comme des décimaux. Cette option n'a vraiment de sens que lorsqu'elle est couplée à -exact ou -sorted.
  • -regexp : pattern est traité comme une expression rationelle et comparé à chaque élément de la liste en utilisant les règles décrites dans la page de référence re_syntax.
  • -sorted : La liste est triée. Si aucune autre option n'est présente, list est triée dans l'ordre croissant et contenant des caractères ASCII. Cette option est incompatible avec -glob et -regexp, et applique le mode -exact si -all ou -not ne sont pas précisés.
  • -start index : La recherche est effectuée à partir de l'élement index, qui peut prendre la valeur de end (dernier élément de la liste) ou end-X (Xème élément depuis la fin).

Si mode est omis alors il est par défaut de -glob. Si plus d'une option -exact, -glob, -regexp et -sorted est spécifiée, seule la dernière option est prise compte. Si plus d'une option -ascii, -dictionnary, -integer et -real est spécifiée, seule la dernière option est prise compte. Si -increasing et -decreasing sont spécifiés, seule la dernière option est prise compte

  • -nocase : Depuis la version 8.5 de TCL, il est possible d'utiliser le switch -nocase pour faire une recherche sans tenir compte de la casse.
  • -index : Fait les recherches sur un index donné de chaque élément de la liste, plutôt que sur tout l'élément.

Un exemple pratique peut être de l'utiliser pour rechercher des timers : par exemple, voici une alternative à timerexists de alltools.tcl qui utilise foreach & string match, mais en utilisant lsearch :

lindex [lsearch -inline -index 1 [timers] "codeDuTimer"] 2

Pour chaque élément renvoyé par timers, on retrouve 3 éléments, dans l'ordre : le temps restant, la commande exécutée, et le numéro d'identification du timer. Ici, on veut rechercher dans la commande, donc dans l'index 1 de la liste. On rajoute le switch -inline pour récupérer l'entrée de la liste, et on récupère ensuite l'élément qui nous interesse (l'identificateur du timer) avec un lindex.

Voir également

list, llength, lindex, lrange, linsert, lreplace, lappend, concat, split, join, lsort, lrepeat, lset, Utilisation des listes