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


action non déclarer.
#14
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)

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."
  }
 
....

C'est en reconnaissant ses erreurs que l'on progresse ;)
Away


Messages In This Thread
action non déclarer. - by aliasangelius - 30/10/2011, 12:05
RE: action non déclarer. - by djkenny - 30/10/2011, 12:52
RE: action non déclarer. - by aliasangelius - 30/10/2011, 14:05
RE: action non déclarer. - by aliasangelius - 30/10/2011, 14:23
RE: action non déclarer. - by djkenny - 30/10/2011, 14:32
RE: action non déclarer. - by aliasangelius - 30/10/2011, 14:45
RE: action non déclarer. - by djkenny - 30/10/2011, 18:51
RE: action non déclarer. - by aliasangelius - 31/10/2011, 11:27
RE: action non déclarer. - by djkenny - 31/10/2011, 14:36
RE: action non déclarer. - by djkenny - 31/10/2011, 14:40
RE: action non déclarer. - by aliasangelius - 31/10/2011, 14:44
RE: action non déclarer. - by djkenny - 31/10/2011, 14:46
RE: action non déclarer. - by aliasangelius - 31/10/2011, 15:27
RE: action non déclarer. - by djkenny - 31/10/2011, 17:55
RE: action non déclarer. - by djkenny - 31/10/2011, 18:05
RE: action non déclarer. - by aliasangelius - 31/10/2011, 19:05
RE: action non déclarer. - by djkenny - 31/10/2011, 22:04
RE: action non déclarer. - by aliasangelius - 31/10/2011, 22:17
RE: action non déclarer. - by djkenny - 31/10/2011, 22:39
RE: action non déclarer. - by DnS - 31/10/2011, 22:44
RE: action non déclarer. - by djkenny - 31/10/2011, 22:47
RE: action non déclarer. - by DnS - 31/10/2011, 22:55
RE: action non déclarer. - by aliasangelius - 31/10/2011, 22:59

Possibly Related Threads…
Thread Author Replies Views Last Post
Question Action sur pseudo KeeViiNou 4 1,322 30/08/2020, 21:42
Last Post: aliasangelius
  Activation Action Replier dsa 5 3,568 28/11/2017, 19:27
Last Post: dsa
  Déclarer $nick dans msgcat. aliasangelius 5 4,952 04/09/2012, 16:27
Last Post: CrazyCat

Forum Jump:


Users browsing this thread: 1 Guest(s)