在tcl脚本中将转换字符串类型转换为整数类型。就像那个数字是字符串的类型,我想增加它,以便如何在tcl中修复它

时间:2016-04-07 06:42:29

标签: tcl

如何在tcl脚本中将字符串类型转换为整数类型。我从另一个文件中获取数据,它是字符串类型。我想增加那个字符串类型的数字,以便如何做。

3 个答案:

答案 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递增,它将解释该值,如果该值被解释为整数,它将递增