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

在tcl脚本中将字符串类型转换为整数类型。就像一个数字是字符串的类型,我想增加它,所以如何在tcl中修复它,tcl,Tcl,如何在tcl脚本中将字符串类型转换为整数类型。就像我从另一个文件中获取数据一样,它是字符串类型。我想增加字符串类型的数字,所以如何做。在Tcl中,一切都是字符串。读这里 如果您使用incr递增,它将解释该值,如果该值被解释为整数,它将递增。Ashish的答案正确。我试图添加一个例子作为对他的答案的评论,但无法清楚地格式化它,所以我添加一个单独的答案。以下是一个例子: % set val "123" 123 % incr val 124 % puts $val 124 % set val "abc

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

在Tcl中,一切都是字符串。读这里


如果您使用incr递增,它将解释该值,如果该值被解释为整数,它将递增。

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
% 

Tcl基本上对你隐瞒了所有类型;无论其类型如何,该值都是该值,并且所有类型都可以序列化为字符串。说“一切都是一个字符串”是很常见的,虽然这在形式上是不准确的,但这种语言合谋使它看起来好像是真的。因此,如果它看起来像一个整数,那么从
incr
的角度来看它就是一个整数(这绝对是推荐的惯用递增方法)

但是,您可以使用
scan
命令进一步强制执行整数。(如果您知道的话,这很像C中的
sscanf()

如果要正确使用
scan
,可能需要检查结果,即成功扫描的字段数

if {[scan $myValue %d%c myInteger dummy] != 1} {
    error "\"$myValue\" isn't a proper integer"
}
incr myInteger
您还可以使用
字符串为整数
;出于历史原因,
-strict
选项应与此一起使用

if {![string is integer -strict $myValue]} {
    error "\"$myValue\" isn't a proper integer"
}
incr myValue
很多人都不关心这些,只是直接增加(包含)值的变量。如果不可能,它将以默认错误消息出错

incr myValue
Tcl总是试图告诉您问题发生时出现了什么问题,以及问题的实际位置。请记住检查堆栈跟踪的
errorInfo
全局变量…

。你可能会在这里得到更多的信息
incr myValue