Я испытываю затруднения при Tcl с помощью чисел с начальными нулями. Я анализирую некоторые числа, которые могут иметь начальные нули, такой как "0012", который должен быть интерпретирован как целое число "двенадцать".
$ tclsh
% set a 8
8
% set b 08
08
% expr $a - 1
7
% expr $b - 1
expected integer but got "08" (looks like invalid octal number)
Что лучший способ состоит в том, чтобы обработать числа, которые могли бы иметь начальные нули в Tcl?
На ноте стороны, что составило бы допустимое восьмеричное число в Tcl, если "08" недопустимый?
Вы захотите прочитать TCL и восьмеричные номера на TCL Wiki. Канонический способ - это обработка вашего ввода в виде строки и использовать команду Scan
для извлечения чисел. Что приводит к этому, да многоуровневая, PREC:
proc forceInteger { x } {
set count [scan $x %d%s n rest]
if { $count <= 0 || ( $count == 2 && ![string is space $rest] ) } {
return -code error "not an integer: \"$x\""
}
return $n
}
Эта ссылка должна помочь вам
Допустимые октальные числа могут содержать только цифры 0-7 и должны начинаться с 0
Лично я всегда использовал:
set $clean_number [regsub {^0*(.+)} $troublesome_number {\1}]
для демонстрации $ SPRUBLESOME_NUMPER
S.