15/06/2008, 18:01
Voici un autre petit code de ma création pour gérer facilement des paramètres aux aux procédures, dans l'esprit Tcl.
Alors comment ça marche? Voici un exemple !
Voici donc la syntaxe de la commande log:
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 :-)
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 :-)