Mise en forme de code: pensez à utiliser les balises [ tcl ] et [ /tcl ] (sans les espaces bien sûr) autour de vos codes tcl afin d'avoir un meilleur rendu et une coloration syntaxique. x


options - Gérer des paramètres pour les procédures
#1
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


Possibly Related Threads…
Thread Author Replies Views Last Post
  [Résolu] Commande /plainte pseudo raison gérer par un eggdrop avec un alias Unrealircd Alucard`68 3 3,987 01/02/2017, 03:39
Last Post: Alucard`68
  Try/Catch: comment gérer ses erreurs facilement. Merwin 5 5,335 02/03/2011, 22:54
Last Post: BeussAy

Forum Jump:


Users browsing this thread: 1 Guest(s)