set varName ?newValue?
#1
Bonsoir,

Je voudrais réaliser un petit TCL qui, dans l'idéal Smile, pioche une question dans un fichier texte, jusque là tout va bien, toutes les Xh15mn
j'ai donc fait comme ceci :

Code :
bind time - "15 * * * *" actionquest
bind pubm -|- * reponse

# -> Sélection de l'énigme
proc actionquest { min hour day month year } {
global rep tps_rep
   set nbr_lignes [compte:lignes $::rpg(quest)]
   set num_hasard [expr int(rand()*$nbr_lignes)+(1&&$nbr_lignes)]
   set ligne [read:event $::rpg(quest) $num_hasard]
   set ligne_split [split $ligne "|"]
   set quest [lindex $ligne_split 0]
   set rep [lindex $ligne_split 1]
    putserv "PRIVMSG $::rpg(chan) :$quest"
    puthelp "PRIVMSG $::rpg(chan) :Vous disposez de 30 secondes pour répondre."
set tps_rep "on"
set utimer 30 endquest
}

# -> Fin du temps de réflexion
proc endquest {nick host hand text} {
global tps_rep
   set tps_rep "off"
}

# -> Verification réponse
proc reponse { nick host hand chan arg text } {
global rep tps_rep
set zoom [lrange arg 0 end]
   if { $tps_rep == "off" } { puthelp "NOTICE $nick :Désolé mais le temsp impartit est écoulé"
    return 0
   }
   if { $zoom != $rep } {
    return 0
   }
   if { $zoom == $rep } {
    puthelp "PRIVMSG $::rpg(chan) : Bravo $nick !!"
  }
}
le problème est que j'ai ça en PL :
Code :
Tcl error [actionquest]: wrong # args: should be "set varName ?newValue?"
et là je suis coincé, pouriez-vous m'aider svp ?
Merci !
Répondre Avertir
#2
Je ne vois pas ta procédure compte:ligne, il est possible qu'elle ne renvoit pas toujours une valeur.
Répondre
#3
J'utilise ceci pour lire et compter :
Code :
# -> Lecture
proc read:event { fichier num_ligne } {
   if { ![file readable $fichier] } { return "\002\0034Erreur\003\002 : impossible de lire le fichier." }
   if { $num_ligne<=0 } { return "\002\0034Erreur\003\002 :  numéro de ligne non valide" }
     set fHnd [open $fichier "r"]
     set counter 0
     set ligne ""
       while { ![eof $fHnd] } {
     set foo [gets $fHnd]
      incr counter
      if { $counter == $num_ligne } {
         set ligne $foo
         break
      }
   }
   close $fHnd
   return $ligne
}

# -> Comptage du nombre de lignes
proc compte:lignes { fichier } {
   if { ![file readable $fichier] } { return 0 }
     set fHnd [open $fichier "r"]
     set counter 0
   while { ![eof $fHnd] } {
      gets $fHnd
      incr counter
   }
   close $fHnd
   return $counter
}
Répondre Avertir
#4
Trouvé...heu...merci Smile
Répondre Avertir
#5
Désolé, j'avais raté ta réponse précédente.
Donc oui, je présume que ton
TCL
set counter 0


était mal placé Wink
Répondre
#6
En effet oui Smile
Répondre Avertir


Atteindre :


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