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
Répondre Avertir


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)
Tchat 100% gratuit -Discutez en toute liberté