Utilisation des listes

From Base de connaissances eggdrops & TCL
Revision as of 16:17, 26 November 2007 by DaV34 (talk | contribs) (linsert)

Jump to: navigation, search

En Tcl, l'aquisition du fonctionnement des listes pour manipuler les chaines de charactère est indispensable. Vous pouvez manipuler des listes de plusieurs manières :

lindex

La commande lindex permet de récuperer un des éléments d'une listes.

Syntaxe :

lindex $variable <valeur>

Exemple :

bind pub - !kiss pub:kiss
proc pub:kiss {nick host hand chan arg} {
   set cible [lindex $arg 0]
   if { $cible ne "" } {
      puthelp "PRIVMSG $chan :$nick fait un gros bisous a $cible"
      return 0
   } else {
      puthelp "PRIVMSG $chan :Il semblerai bien que $nick se fasse un bisou a lui même"
      return 0
   }
}

Comme vous l'avez sans doute deviné, ici, notre variable cible aura pour valeur ce que la personne aura écrit après !kiss (en l'occurence, un pseudo, normalement).

lindex n'est pas plus compliquer que cela, bon courage.

lrange

La commande lrange permet de récuperer plusieurs éléments d'une listes.

Contrairement a la méthode lindex donc, ont peut récuperer plusieurs choses.

Il va donc falloir savoir se que l'ont veut chercher.

Syntaxe :

lrange $variable <debut> <fin>

<debut> et <fin> peuvent être des nombres ou un mot. Je fais allusion a "end" comme mot.

Exemple :

bind pub - !kick pub:kick
proc pub:kick {nick host hand chan arg} {
   set kick(pseudo) [lindex $arg 0]
   set kick(raison) [lrange $arg 1 end]
   if { $kick(pseudo) ne "" && $kick(raison) ne "" } {
      puthelp "KICK $chan $kick(pseudo) :$kick(raison) par $nick"
      return 0
   } else {
      puthelp "NOTICE $nick :Syntaxe : !kick <pseudo> <raison>"
      return 0
   }
}

Se bout de code vous permet donc de kicker une pseudo. lrange intervient donc dans la variable kick(raison). Pour améliorer se tcl, vous pourrez toujours rajouter une condition pour savior si le pseudo qui va être kické est présent sur le salon.

Petit plus : Comme valeur sur lindex & lrange, vous pouvez utilisez end, end-1 (l'avant dernier mot) ...

llength

La commande llength permet de retourner le nombre d'élément d'une liste.

Syntaxe :

llength $variable

Exemple :

bind pub - !compte pub:compte
proc pub:compte {nick host hand chan arg} {
   set chaine [lrange $arg 0 end]
   if { $chaine ne "" } {
      puthelp "PRIVMSG $chan :Je compte [llength $chaine] mot dans la chaine \"$chaine\""
      return 0
   } else {
      puthelp "NOTICE $nick :Syntaxe incorrecte : !compte <phrase>"
      puthelp "NOTICE $nick :Cette commande permet de compter le nombre de mot dans une phrase (elle compte aussi les signes de ponctuactions."
      return 0
   }
}

Se script tcl permet donc de compter le nombre de mot dans une phrase, autrement appeller chaine de charactère.

lappend

La commande lappend permet d'ajouter une chaine de charactère apres une variable avec un espace.

Syntaxe :

lappend <variable> <chaine>

Exemple :

set machin "salut ca"
lappend machin "va ?"
putlog $machin

En l'occurence, la, $machin aura pour valeur "salut ca va ?". L'utilisation de cette commande est très simple, mais peut s'avérer utile lorsque que vous manipulez de longue chaine.

append

La commande append, contrairement a lappend permet d'ajouter une chaine de charactère apres une variable sans espace.

Syntaxe :

append <variable> <chaine>

Exemple :

set machin "salut ca"
apprend machin "va ?"
putlog $machin

En l'occurence, la, $machin aura pour valleur "salut cava ?". Attention de bien faire la distinction entre lappend et append.

linsert

La commande linsert permet d'inserer dans une variable contenant une chaine de charactère un/des valeur qui peuvent être des mots, des nombres ...

Syntaxe :

linsert <variable> <position> <chaine>

Exemple :

set variable "salut ca va ?"
linsert $variable 1 "est-ce-que"
putlog $variable

Donc $variable aura au finant comme valeur "salut est-ce-que ca va ?". N'hésitez pas a vous entrainez, cela peut vous parraitre compliquer mais en l'occurence, non vous faites se que vous voulez.

list

La commande list permet d'enregistrer dans une variable plusieurs informations sous formes de liste (organisée).

Syntaxe :

set <variable> [list <arguments>]

Exemple :

set machin [list {salut} {ca} {va}

Si vous essayer d'afficher $machin, il vous affichera "salut ca va". En revanche, si vous l'utilisez dans une boucle, se qui est préférable, il vous traitera les valeurs de la variable les unes apres les autres. Vous comprendrez mieu cette fonction list lorsque nous aborderons les boucles.

lsort

La commande lsort permet de classer une liste par ordre alphabetique.

Syntaxe 1 : <cote tcl>lsort $variable</source>

Exemple :

set bidule [list {z} {y} {x} {w} {v} {u} {t} {s} {r} {q} {p} {o} {n} {m} {l} {k} {j} {i} {h} {g} {f} {e} {d} {c} {b} {a}]
set bidule [lsort $bidule]
putlog $bidule

Se code tcl vous remet la liste des lettres de l'alphabet dans l'ordre.

Exemple 2 :

bind pub - !ordre pub:ordre
proc pub:ordre {nick host hand chan arg} {
   set phrase [lrange $arg 0 end]
   set phrase [split $phrase " "]
   set phrase [lsort $phrase]
   if { $phrase ne "" } {
      puthelp "PRIVMSG $chan :Voici votre phrase organiser dans l'ordre alphrabetique :"
      puthelp "PRIVMSG $chan :$phrase"
      return 0  
   } else {
      puthelp "NOTICE $nick :Syntaxe : !ordre <phrase"
      return 0
   }
}

Se code permet de vous retranscrire se que vous lui avez donner dans l'ordre alphabetique. La source est facilement optimisable, les trois lignes peuvent être remplacé par un seule soit :

set phrase [lsort [split [lrange $arg 0 end] " "]]

Bien que le lrange soi quelque peut inutile, étant donnée que $arg contient la phrase.

lsearch

La commande lsearch permet de chercher dans une chaine de charactere un mot.

Syntaxe :

lsearch $variable test

Exemple :

set liste_admin "DaV34 Crazy_Cat"
bind pub - !isadmin pub:isadmin
proc pub:isadmin {nick host hand chan arg} {
   set cible [lindex $arg 0]
   if { $cible ne "" } {
      if { [lsearch $::liste_admin $cible] eq 0 } {
         puthelp "PRIVMSG $chan :$cible fait bien partit des administrateurs du bot."
         return 0
      } else {
         puthelp "PRIVMSG $chan :$cible ne fait pas partit des administrateurs du bot."
         return 0
      }
   } else {
      puthelp "NOTICE $nick :Syntaxe : !isadmin <pseudo>"
      puthelp "NOTICE $nick :Permet de vérifier si pseudo est un administrateur du robot."
      return 0
   }
}

Se tcl permet de vérifier par le biais d'une commande si une personne est administrateur du robot. Adminstrateur du robot est vaste, en vérité, c'est de vérifier si la personne se trouve dans la variable $liste_admin, que vous pouvez donc ensuite utilisée comme liste des access.

join

La commande join permet de joindre les éléments d'une liste.

Syntaxe :

join $variable <arguments>

Exemple :

set data "1 2 3 4 5 6 7 8 9 10"
join $data ", "
putlog $data

Retourne :

$data = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10

Bien qu'il soit rare d'utiliser join, cette commande reste importante. Attention : Vous remarquerez que j'ai mit un espace dans la deuxieme ligne du code de l'exemple, vous remarquerez donc ce que cela retourne, ne vous y trompez pas, faite attention aux éventuelles erreurs stupide.