besoin d'aide pour un debug
#1
Bonjour
soyons bref mais clair ... je suis entrain de bricoler une espece d'horloge parlante qui envois sur mon chan un message different a chaque heure... ce script fonctionne tres bien a toute les heures SAUF a 9h et 10h ou il ne me donnes pas de message parcontre j'ai un retour en PL

pour 9h...
Code :
[08:00] Tcl error [pub_timer]: missing operator at _@_
in expression "0_@_8+1";
looks like invalid octal number
et pour 10h j'ai le meme message avec un 9 a la place du 8

voici ci apres le bout de script que j'utilise
Code :
...
# on definis les binds
bind time - "00 * * * *" pub_timer

# puis les proc
proc pub_timer {min hour day month year} {

# appel des variables globales
global offset dst chan

## definition des variable heure-minutes-secondes

set h [clock format [clock seconds] -format "%H"]
set m [clock format [clock seconds] -format "%M"]

if {$dst==1} {
        set h [expr $h+$offset+1]
        } else {
                set h [expr $h+$offset]
                }
if {$h == 24} {set h 0}

#switch pour avoir le message de l'heure
switch $h {
        0  {putserv "PRIVMSG $chan :Hey il est $h:$m. Faudrais penser a aller se coucher"}
        1  {putserv "PRIVMSG $chan :$h:$m.... j'en connais qui vont être fais demain"}
        2  {putserv "PRIVMSG $chan :deja $h:$m. Lachez les films humhum et allez vous coucher ca vaudras mieux"}
        3  {putserv "PRIVMSG $chan :dites il est quand meme $h:$m, c'est pas la peine de vous priver de sommeil pour moi"}
        4  {putserv "PRIVMSG $chan :Oula $h:$m et on n'est la a discuter.... qui qui va pas savoir se lever tout a l'heure ? moi perso j'm'en tape j'suis un bot"}
        5  {putserv "PRIVMSG $chan :Il est $h:$m Paris s'eveille. Et vous n'avez pas sommeil ?"}
        6  {putserv "PRIVMSG $chan :dring dring dring... Hey ouai c'est le reveil deja $h:$m .Encore une nuit blanche"}
        7  {putserv "PRIVMSG $chan :Un cafe creme pour moi et de la confiture de fraises pour mes brioches. Merci"}
        8  {putserv "PRIVMSG $chan :Allez les enfants il est $h:$m, faut se preparer pour l'ecole"}
        9  {putserv "PRIVMSG $chan :Bon $h:$m, qui a ramener le journal ce matin ?"}
        10 {putserv "PRIVMSG $chan :AHHHHH $h:$m enfin l'heure de la pause cafe"}
        11 {putserv "PRIVMSG $chan :P'pa t'es a la bourre.... les autres, courage plus qu'une heure et c'est la pause dej"}
...

mais ou donc se trouve mon erreur ? ou vas t'il me chercher ce _@_ ?

Merci de vos regard experts et de vos reponses
Répondre Avertir
#2
Premièrement je te conseil de mette le tcl complet et de mettre [ tcl ] a la place de [ code ] Wink
Répondre Avertir
#3
ok desolé
donc voici le tcl complet
TCL
###############################################
##					     ##
##		Horloge bavarde		     ##
##					     ##
##	   copyright Teddy (c) 2009	     ##
##					     ##
###############################################

##################################################
## description :			     	##
## une horloge qui annonce a chaque heure un 	##
## message humoristique et sur simple		##
## commande elle donne l'heure et l'ephemeride	##
##					     	##
## commandes :				     	##
## !heure : donnes l'heure du shell	     	##
## !ephemeride : donnes l'éphémeriddu jour    ##
## 					     	##
## Attention mysqltcl est requis pour ce script ##
##################################################

## Zone a personnaliser

# chan ou interagir
set chan "#aad"

# decalage par rapport a GMT (-12 a +12)
set offset 1

# heure d'ete (1 "oui" / 0 "non")
set dst 0

# identifiant mysql
set my_host	"localhost"
set my_user 	"ephemeride"
set my_pass 	"passwd"
set my_db 	"ephemeride"

#chemin de  la librairie mysqltcl
load /usr/lib/tcltk/mysqltcl-3.05/libmysqltcl3.05.so

 
###############################################
##         NE PAS MODIFIER PLUS LOIN         ##
###############################################

##Version du script
set ver "Ver 1.8"

######### LE SCRIPT COMMENCE ICI ################

## annonce a heure fixe
## exemple bind time - " min heure jour mois annee " proc

# on definis les binds
bind time - "00 * * * *" pub_timer

# puis les proc
proc pub_timer {min hour day month year} {
 
# appel des variables globales
global offset dst chan

## definition des variable heure-minutes-secondes
 
set h [clock format [clock seconds] -format "%H"]
set m [clock format [clock seconds] -format "%M"]
 
if {$dst==1} {
        set h [expr $h+$offset+1]
        } else {
                set h [expr $h+$offset]
                }
if {$h == 24} {set h 0}

#switch pour avoir le message de l'heure
switch $h {
	0  {putserv "PRIVMSG $chan :Hey il est $h:$m. Faudrais penser a aller se coucher"}
	1  {putserv "PRIVMSG $chan :$h:$m.... j'en connais qui vont être fais demain"}
	2  {putserv "PRIVMSG $chan :deja $h:$m. Lachez les films humhum et allez vous coucher ca vaudras mieux"}
	3  {putserv "PRIVMSG $chan :dites il est quand meme $h:$m, c'est pas la peine de vous priver de sommeil pour moi"}
	4  {putserv "PRIVMSG $chan :Oula $h:$m et on n'est la a discuter.... qui qui va pas savoir se lever tout a l'heure ? moi perso j'm'en tape j'suis un bot"}
	5  {putserv "PRIVMSG $chan :Il est $h:$m Paris s'eveille. Et vous n'avez pas sommeil ?"}
	6  {putserv "PRIVMSG $chan :dring dring dring... Hey ouai c'est le reveil deja $h:$m .Encore une nuit blanche"}
	7  {putserv "PRIVMSG $chan :Un cafe creme pour moi et de la confiture de fraises pour mes brioches. Merci"}
	8  {putserv "PRIVMSG $chan :Allez les enfants il est $h:$m, faut se preparer pour l'ecole"}
	9  {putserv "PRIVMSG $chan :Bon $h:$m, qui a ramener le journal ce matin ?"}
	10 {putserv "PRIVMSG $chan :AHHHHH $h:$m enfin l'heure de la pause cafe"}
	11 {putserv "PRIVMSG $chan :P'pa t'es a la bourre.... les autres, courage plus qu'une heure et c'est la pause dej"}
	12 {putserv "PRIVMSG $chan :Enfin $h:$m, j'ai les crocs moi... bon y'a quoi au menu ?"}
	13 {putserv "PRIVMSG $chan :$h:$m...chut c'est le journal de TF1... Quel catastrophe vont ils encore nous pondre ?"}
	14 {putserv "PRIVMSG $chan :la vaisselle est faite, les gamins sont a l'ecole... hmmm $h:$m c'est une bonne heure pour la sieste devant les feux de l'amour"}
	15 {putserv "PRIVMSG $chan :Bon $h:$m l'aprem avance bien... on va commencer a preparer le gouter"}
	16 {putserv "PRIVMSG $chan :OUAIIIIIII il est %h:$m c'est l'heure du gouter. Je veux mon chocoBN avec la bouche qui sourit"}
	17 {putserv "PRIVMSG $chan :Ah, $h:$m !!  les chatteurs vont commencer a revenir (enfin apres les bouchons du retour)"}
	18 {putserv "PRIVMSG $chan :Chez nos amis outre manche $h:$m c'est la tea-time"}
	19 {putserv "PRIVMSG $chan :Ah ben il est deja $h:$m P'pa va pas tarder. On lui fais une blague ?"}
	20 {putserv "PRIVMSG $chan :Mettez France 3. il est $h:$m c'est bientot la meteo... qu'est ce qu'ils prevoient pour demain ?"}
	21 {putserv "PRIVMSG $chan :Comme d'hab $h:$m et rien a la TV.... Heureusement qu'on a $chan, qu'est ce qu'on s'emm...quiquinerais le soir sinon."}
	22 {putserv "PRIVMSG $chan :Allez les enfants il est deja $h:$m... c'est l'heure d'aller se coucher. Et il n'y a pas de ...mais heu... qui comptes"}
	23 {putserv "PRIVMSG $chan :Ah ben voila, il est $h:$m... les enfants sont au lit.. et XXL viens de reprendre l'antenne....Je vous vois v'nir canaillou..."}
	}
}

## horloge et Ephemeride

# annonce de l'heure
bind pub - !heure pub_time
 
proc pub_time {nick host and args} {
 
#appel des variables globales
global offset dst chan
## definition des variable heure-minutes-secondes
 
set h [clock format [clock seconds] -format "%H"]
set m [clock format [clock seconds] -format "%M"]
set s [clock format [clock seconds] -format "%S"]
if {$dst==1} {
        set h [expr $h+$offset+1]
        } else {
                set h [expr $h+$offset]
                }
if {$h==24} { set h 0 }
#envoi au chan
putserv "PRIVMSG $chan :DING DING DING au 3e Top il sera exactement $h:$m:$s"
putserv "PRIVMSG $chan :TOP... TOP... TOP"
}

# Ephemeride
bind pub - !ephemeride pub_ephemeride
 
proc pub_ephemeride {nick args} {
 
#appel des variable globales
global chan my_host my_user my_pass my_db

#definition des jour mois annee Njour Nsem
set nojour [clock format [clock seconds] -gmt true -format "%j"]e
set nosem [clock format [clock seconds] -gmt true -format "%V"]e
set date [clock format [clock seconds] -gmt true -format "le %a %d/%m/%Y"]

 
#mysql
# connection a la base mysql
set db_handle [mysqlconnect -host $my_host -user $my_user -password $my_pass -db $my_db ]

#definition de la date a rechercher
set dtable [clock format [clock seconds] -format "%d/%m"]

#creation de la requete SQL
set whereclause "WHERE JourMois='$dtable'"
set sql "SELECT * FROM saint $whereclause"

#envois de la requete au serveur
set result [mysqlquery $db_handle $sql]

#traitement de la reponse
if {[set row [mysqlnext $result]] != ""} {
	set saint [lindex $row 2]
	if {[lindex $row 1] != ""} {
	set dicton [lindex $row 1] 
	} else {
		set dicton "Faire les cent pas ou mettre la charrue avant les boeufs, ce n'est sans doute pas la bonne solution, alors, soyez patient... tout vient a  point..."
		}
	if {[lindex $row 4] != ""} {
	set anniv [lindex $row 4]
	} else {
	set anniv "personne aujourd'hui"
	}
 
	} else {
    		set saint ""
    		set dicton "Faire les cent pas ou mettre la charrue avant les boeufs, ce n'est sans doute pas la bonne solution, alors, soyez patient... tout vient a  point..."
		}

#envoi au chan
 
putserv "PRIVMSG $chan :Nous sommes $date. ($nojour jour de l'annee) Nous fetons $saint"
putserv "PRIVMSG $chan :Nous sommes dans la $nosem semaine de l'annee"
putserv "PRIVMSG $chan :Dicton du jour : $dicton"
putserv "PRIVMSG $chan :c'est l'anniversaire de : $anniv"

# deconnection de la base mysql
mysqlclose $db_handle
 
}
putlog "horlogebavarde.tcl $ver chargee avec succes"


Répondre Avertir
#4
A voir l'erreur, TCL doit prendre un nombre décimal pour un nombre octal.
En fait, c'est normal, car quand le nombre en question est précédé d'un 0 dans expr, il est automatiquement traité comme un nombre octal. D'ou le bug avec 08 09 etc => ce ne sont pas des nombres octaux valides.

Pour moins de problèmes, moi je dis, vaut mieux utiliser incr :
TCL
set h [clock format [clock seconds] -format "%H"]
set m [clock format [clock seconds] -format "%M"]
set s [clock format [clock seconds] -format "%S"]
if {$dst==1} {
        set h [expr $h+$offset+1]
        } else {
                set h [expr $h+$offset]
                }
if {$h==24} { set h 0 }



=> Après quelques changements:

TCL
set h [strftime "%H"]
incr h $offset
incr h $dst
if {$h == 24} { set h 0 }


Répondre Avertir
#5
Merci Artix j'ai testé ton idée, ca marche enfin correctement. Cependant une petite adaptation a due être apporté, à la place de
TCL
set h [strftime "%H"]


j'ai du utiliser
TCL
set h [strftime "%k"]


.
Mais bon le plus important c'est que le resultat attendu est obtenu.
Répondre Avertir


Atteindre :


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