Communauté Eggdrop

Version complète : options - Gérer des paramètres pour les procédures
Vous consultez actuellement la version basse qualité d’un document. Voir la version complète avec le bon formatage.
Voici un autre petit code de ma création pour gérer facilement des paramètres aux aux procédures, dans l'esprit Tcl.

tcl
# options <ArrayName> <OptionsList> ?OptionSpec? ?OptionSpec?
#
#   Cette commande simpliste est utile pour parser des options passées à une
#   procédure. OptionsList est une liste d'options, avec ou sans arguments.
#
#   La procédure parse cette liste et place le résultat dans le tableau
#   ArrayName, chaque entrée est le nom d'une option.
#
#   OptionSpec est une sous liste de deux éléments, le premiers définis le nom
#   d'une option et le second la valeur par default. A partir du moment où
#   vous mettez une OptionSpec pour une valeur elle sera dans ArrayName.
 
proc options {arrayName OptionsList args} {
 
    upvar 1 $arrayName options
 
    for {set i 0} {$i <= [llength $OptionsList]} {incr i} {
 
        set optName [lindex $OptionsList $i]
        set optValue [lindex $OptionsList [expr {$i+1}]]
 
        if {[string index $optName 0] ne "-"} {
            continue
        }
 
        set options($optName) ""
 
        if {[string index $optValue 0] ne "-"} {
            set options($optName) $optValue
        }
    }
 
    foreach optSpec $args {
        lassign $optSpec optName optValue
        if { ![info exists options($optName)] } {
            set options($optName) $optValue
        }
    }
 
}



Alors comment ça marche? Voici un exemple !

tcl
proc log {texte args} {
 
   options opt $args {-chan stdout} {-logfile mylog.log}

   # On a donc un tableau opt() qui contient toutes les options
   # passées à la commande. opt(-chan) = stdout, etc.
   # Vous pouvez passez n'importe qu'elle option en paramètre.
 
   if { ![info exists opt(-nolog)] } {
      try {
          set fileID [open $opt(-logfile) a+]
          puts $fileID $texte
          close $fileID
      } catch {
          puts stderr "Unable to write log file: $::errorMsg"
      }
   }
 
   puts $opt(-chan) $texte
 
}



Voici donc la syntaxe de la commande log:

Code :
log <texte> [-nolog] [-logfile <fichier.log>] [-chan <channel>]

Ici on spécifie des valeurs par defaut pour les options -logfile et -channel, mais ce n'est pas obligatoire !

En respérant que ce petit snippet vous sera utile Smile