Сравнение числовых значений в Tcl - PullRequest
0 голосов
/ 13 мая 2019

Я хочу знать, как получить числовое значение в 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? Или помогите мне с оператором использовать в достижении этого ...

Спасибо Мэтти

Ответы [ 2 ]

1 голос
/ 13 мая 2019

Вы должны подумать, какую проверку вы хотите.Например, если вы хотите просто проверить, что значение является целым числом, any integer, сделайте следующее:

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)"
}
1 голос
/ 13 мая 2019

Вы можете проверить строку с помощью процедуры [string is ...]. Например:

set trueKIND [string is integer -strict $Registrant(KIND)]

Ссылка: https://www.tcl.tk/man/tcl8.6/TclCmd/string.htm#M10

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...