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

Nar*_*mar 0 tcl

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

Don*_*ows 5

Tcl基本上对你隐藏了所有类型;无论其类型如何,值都是值,并且所有类型都可以序列化为字符串。人们通常说 \xe2\x80\x9ceeverything 都是一个字符串 \xe2\x80\x9d,虽然这在形式上是不准确的,但语言密谋让它看起来好像是真的。因此,如果它看起来像一个整数,那么从以下角度来看它就是一个整数incr一个整数(这绝对是推荐的惯用递增方法)。

\n\n

但是,您可以使用该scan命令进一步强制整数性。(这非常像sscanf()(如果你知道的话,

\n\n
scan $myValue %d myInteger\nincr myInteger\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果您要使用scan正确使用,你可能应该检查它的结果,即成功扫描的字段数。

\n\n
if {[scan $myValue %d%c myInteger dummy] != 1} {\n    error "\\"$myValue\\" isn\'t a proper integer"\n}\nincr myInteger\n
Run Code Online (Sandbox Code Playgroud)\n\n

您还可以使用string is integer; 这-strict选项应该与此一起使用。

\n\n
if {![string is integer -strict $myValue]} {\n    error "\\"$myValue\\" isn\'t a proper integer"\n}\nincr myValue\n
Run Code Online (Sandbox Code Playgroud)\n\n

很多人不关心这些,只是直接增加(包含该变量的)值。如果不可能,它会出错并显示默认错误消息。

\n\n
incr myValue\n
Run Code Online (Sandbox Code Playgroud)\n\n

当问题发生时,Tcl 总是试图告诉您出了什么问题,以及问题实际上出在哪里。请记得检查errorInfo全局变量的堆栈跟踪\xe2\x80\xa6

\n