Soucis au niveau de "expr"
#1
Bonjour,

Je poste la, car vraiment, je ne vois plus la solution, j'ai éssayer pas mal de solution, mais toujours des erreurs.

Donc en gros, ont par du principe ou j'ai une variable "x", qui a une valeur, je veut l'additionner a une variable "y" que je vais récuperer dans un fichier.
Voila en gros ce que je dois faire.

En pratique :

tcl
proc waar:up {min hour day month year} {
	set liste [open [dofia:dir]db/waar-access.db r]
	putlog "Pseudo / Pass / Mail / Date-Inscription / Total-Or / Total-Population / Total-Xp / Total-Soldat / Total-Chevalier / Total-Héros / Lvl-Or"
	foreach var [split [read $liste] "\n"] { 
		foreach a [list pseudo pass mail dinscription totor totpop totxp totsoldat totchevalier totheros lvlor] b [list 0 1 2 3 5 6 7 8 9 10] { set $a [lindex $var $b] }
		set lvlpowa [waar:get "lookor $lvlor"]
		# Le soucis se trouve a se niveau
		set ntotor [expr $totor + $lvlpowa]
		set ntotpop [expr {$totsoldat + $totchevalier + $totheros}]
		dofia:file "verif waar-access $pseudo"
		dofia:file "multiwrite waar-access $pseudo $pass $mail $dinscription $ntotor $ntotpop $totxp $totsoldat $totchevalier $totheros $lvlor"
	}
}


En gros, la proc waar:up se lance tout les quarts d'heures et je voudrais qu'elle mette a jour deux variables.
- "totor", qui définie le nombre d'or que possède la personne
- "ntotpop", qui définie la population totale de la personne

Je vous poste la proc waar:get pour que les choses soient bien claire :

tcl
proc waar:get {arg} {
	set arg [split $arg]
	set cmd [string tolower [lindex $arg 0]]
	set opt [string tolower [lindex $arg 1]]
	switch -exact $cmd {
		"lookor" {
			#Oragnisation: <lvl> <nbreor>
			set liste [open [dofia:dir]db/waar-database.db r]
			foreach var [split [read $liste] "\n"] {
				if {[lindex $var 0] eq $opt} {
					return [expr {[lindex $var 1] / 4}]
					break;
				} else {
					continue;
				}
			}
		}
	}
}



Le soucis, comme dit précédement, se trouve bel et bien a se niveau la :

tcl
set ntotor [expr $totor + $lvlpowa]



Avec cette solution, l'erreur retourner est :
Citation :Tcl error: syntax error in expression "0 + ": premature end of expression

J'ai donc essayer :

tcl
set ntotor [expr {$totor + $lvlpowa]



Avec cette nouvelle solution, l'erreur retourner est :
Citation :Tcl error: can't use empty string as operand of "+"

Alors n'ayant trouver, j'ai essayer une méthode barbare, adapter a mon script, qui me retourne elle encore une erreur. Il s'agit de crée une proc addition, voyez cela :

tcl
proc addition {e1 e2} {
	set a "0"
	incr a $e1
	incr a $e2
	return $a
}



J'utilise donc pour mon chimblic :

tcl
set ntotor [addition $totor $lvlpowa]



L'erreur retournée est :

Citation :Tcl error: expected integer but got ""


Voila, si quelqu'un a la solution, sa serait sympa de me la donner, car bon, je suis sur que pour mon cas se sont des erreurs a la con.
Répondre Avertir
#2
Je pense que tes variables issues du fichier sont prises comme des strings, donc ton expr ne sait pas s'en servir.
Essaye quelque chose du genre:
tcl
set ntotor [expr $totor + [eval $lvlpowa]]


Répondre
#3
Le soucis a été réglé par TiSmA.
Nous en avons déduis que je me compliquais 100 fois trop la vie (overdose de tcl, pas bon xD)

La source actuele :

tcl
proc waar:up {min hour day month year} {
	set liste [open [dofia:dir]db/waar-access.db r]
	putlog "Pseudo / Pass / Mail / Date-Inscription / Total-Or / Total-Population / Total-Xp / Total-Soldat / Total-Chevalier / Total-Héros / Lvl-Or"
	foreach var [split [read $liste] "\n"] {
		if {$var ne ""} {
			dofia:file "del waar-access [lindex $var 0]"
			set vnew [waar:get "lookor [lindex $var 10]"]
			dofia:file "multiwrite waar-access [lindex $var 0] [lindex $var 1] [lindex $var 2] [lindex $var 3] [expr [lindex $var 4] + [subst -nocommands $vnew]] [lindex $var 5] [lindex $var 6] [lindex $var 7] [lindex $var 8] [lindex $var 9] [lindex $var 10]"
		}
	}
	close $liste
}



Encore un grand merci a TiSmA.


PS : Enfait, j'avais un soucis au niveau du renvoie d'une de mes vars.
Répondre Avertir
#4
DaV34 a écrit :Encore un grand merci a TiSmA.
... ainsi qu'à tous ceux qui ont essayé de t'aider, CrazyCat, moi-même, .. [Image: http://www.boulets-roxx.com/forum/Smiley...siffle.gif]
Répondre Avertir
#5
MenzAgitat a écrit :
DaV34 a écrit :Encore un grand merci a TiSmA.
... ainsi qu'à tous ceux qui ont essayé de t'aider, CrazyCat, moi-même, .. [Image: http://www.boulets-roxx.com/forum/Smiley...siffle.gif]


Tu as raison, j'ai oublié de vous remerciez ... (bouh ! que je suis impolis moi alors).
Non serieusement merci, j'ai certainement oublier de le mentionner au vu de l'heure a laquelle j'ai poster mon message xD
Répondre Avertir


Atteindre :


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