如何在tcl脚本中将字符串类型转换为整数类型。我从另一个文件中获取数据,它是字符串类型。我想增加那个字符串类型的数字,以便如何做。
答案 0 :(得分:2)
Tcl基本上隐藏了你的所有类型;值是值,无论其类型如何,所有类型都可序列化为字符串。说“一切都是字符串”是很常见的,虽然这种形式是不正确的,但语言合谋使它看起来好像是真的。因此,如果它看起来像一个整数,那么从incr
的角度看是一个整数(这绝对是推荐的惯用增量方法)。
但是,您可以使用scan
命令来强制执行整数。 (如果你知道的话,它非常像C中的sscanf()
。)
scan $myValue %d myInteger
incr myInteger
如果你要正确使用scan
,你可能应该检查它的结果,即成功扫描的字段数。
if {[scan $myValue %d%c myInteger dummy] != 1} {
error "\"$myValue\" isn't a proper integer"
}
incr myInteger
您也可以使用string is integer
;由于历史原因,-strict
选项应与此一起使用。
if {![string is integer -strict $myValue]} {
error "\"$myValue\" isn't a proper integer"
}
incr myValue
很多人都不会为此烦恼而只是直接增加(包含变量)值。如果无法使用默认错误消息,则会出错。
incr myValue
Tcl总是试图告诉你出现问题时出了什么问题,以及问题实际发生的地方。请记得检查errorInfo
全局变量以查找堆栈跟踪...
答案 1 :(得分:1)
Ashish有正确的答案。我试着添加一个例子作为对他的答案的评论,但无法清楚地格式化,所以我作为一个单独的答案添加。这是一个例子:
% set val "123"
123
% incr val
124
% puts $val
124
% set val "abc"
abc
% incr val
expected integer but got "abc"
% puts $val
abc
%
答案 2 :(得分:0)
在Tcl中,一切都是字符串。阅读http://wiki.tcl.tk/3018
如果您使用incr递增,它将解释该值,如果该值被解释为整数,它将递增