我想知道如何在TCL中获取数值。我的意思是,如果该值不是数字,则结果将失败,否则将通过。
以下是我尝试过的内容;
set trueKIND false
set trueKINDlist [list 1 2 3 4 5 6 7 8 9 10]
if {[lsearch -exact $trueKINDlist $Registrant(KIND)] >= 0} {
set trueKIND true
}
但是,如果trueKINDlist的值> 10,该代码肯定会失败...
有人可以告诉我如何在TCL中编写吗?或协助我与操作员一起使用以实现此目标...
谢谢 玛蒂
答案 0 :(得分:1)
您可以通过[string is ...]
过程来验证字符串。例如:
set trueKIND [string is integer -strict $Registrant(KIND)]
答案 1 :(得分:1)
您必须考虑想要哪种验证。例如,如果您只想验证值是整数, any 整数,请执行以下操作:
if {![string is entier -strict $value]} {
error "$value is not an integer"
}
(也有string is integer
,但是出于历史原因使用受限的32位范围,而string is wide
使用64位范围。对于浮点数,请使用string is double
。-strict
是必需的;没有它,空字符串也将被接受;同样,这是出于历史原因。)
当您要在特定范围内输入数值时,可以使用复合条件:
if {![string is entier -strict $value] || !($value >= 0 && $value <= 10)} {
error "$value is not an integer in the range (0..10)"
}
如果您经常这样做,请使用以下步骤使其更清晰:
proc IntegerInRange {value lowerBound upperBound} {
expr {[string is entier -strict $value] && $value >= $lowerBound && $value <= $upperBound}
}
if {![IntegerInRange $value 0 10]} {
error "$value is not an integer in the range (0..10)"
}
if {![IntegerInRange $value2 3 25]} {
error "$value2 is not an integer in the range (3..25)"
}