ba, à chaque modification, t'ouvres le fichier en lecture, tu charges les données dans une variable, tu modifies la variable, (normalement tu refermes le fichier et tu le ré-ouvres en écriture), tu inscrits la valeur de la variable dans le fichier et tu fermes le tout ...
bref ça fait beaucoup de chose pour pas grand chose.
ma solution:
- au chargement du tcl tu charges le fichier dans ta variable (un seul chargement à la place d'un chargement a chaque appel de la procédure)
- dans la procédure tu modifies la variable
- et enfin avec un bind evnt save (sauvegarde des fichiers de l eggdrop une foi par heure) tu sauvegardes les données de ta variable dans le fichier
avantage:
- moins d'interactions avec le fichier
- la procédure s’exécute plus rapidement
- simplicité de codage puisque tu n'as plus à t'occuper de l ouverture/fermeture du fichier, par exemple dans le cas ou tu fais une procédure pour récupérer une liste des pseudos autorisés, il te suffis de faire un foreach sur la variable.
exemple: (pour reprendre le code que je t'avais filé l'autre jour)
bref ça fait beaucoup de chose pour pas grand chose.
ma solution:
- au chargement du tcl tu charges le fichier dans ta variable (un seul chargement à la place d'un chargement a chaque appel de la procédure)
- dans la procédure tu modifies la variable
- et enfin avec un bind evnt save (sauvegarde des fichiers de l eggdrop une foi par heure) tu sauvegardes les données de ta variable dans le fichier
avantage:
- moins d'interactions avec le fichier
- la procédure s’exécute plus rapidement
- simplicité de codage puisque tu n'as plus à t'occuper de l ouverture/fermeture du fichier, par exemple dans le cas ou tu fais une procédure pour récupérer une liste des pseudos autorisés, il te suffis de faire un foreach sur la variable.
exemple: (pour reprendre le code que je t'avais filé l'autre jour)
tcl
namespace eval autorise {
variable salons "#test"
variable data
variable file [file join scripts autorised.db]
# on vérifie si le fichier existe, sinon on le crée
if ![file exists $file] {
catch {open $file w+} p
catch {close $p}
}
# on reset la valeur de data qui contiendra la contenue du fichier db
#(utile pour les rehash)
set data ""
# on charge le contenue du fichier dans la variable data
catch {open $file r} p
while {![eof $p]} {
if {[gets $p d]!=""} {lappend data $d}
}
catch {close $p}
unset p
# le bind qui servira a sauvegarder toutes les heures
bind evnt - save autorise::save_file
# la procédure qui va avec et qui sauvegarde le contenue de $data dans le fichier
proc save_file {type} {
variable data
variable file
if {$data==""} return
catch {open $file w+} p
foreach d $data {
if {$d!=""} {puts $p [join $d]}
}
catch {close $p}
putlog "Sauvegarde du fichier autorised.db"
}
.....
# le bind pub pour ajouter une personne
bind pub - .+autorise autorise::add
proc add {nick host hand chan arg} {
#on déclare la variable data qui contient les données
variable data
variable salons
if {[lsearch -nocase $salons $chan]==-1} return
if {[llength $arg]!=1} {puthelp "NOTICE $nick :syntaxe: .+autorise <pseudo>";return}
# comme dit plus haut un simple foreach sur $data et on test (stgcomp = string equal -nocase)
foreach d $data {
if {[stgcomp [lindex $d 0] $chan] && [stgcomp [lindex $d 1] $arg]} {
putserv "NOTICE $nick :ce pseudo est déjà autorisé sur $chan."
return
}
}
# et ici on ajoute les données avec un simple lappend
lappend data [string tolower "$chan $arg"]
putserv "NOTICE $nick :$arg est a été ajouté sur $chan."
}
....