A-A+

TCL使用format创建格式化字符串

2019年11月17日 脚本 阅读 9,865 views 次

TCL使用format命令进行字符串的格式化,功能与ANSI C中的sprintf函数相似。例如:

format "The square root of 10 is%.3f" [expr sqrt(10)]

The square root of 10 is 3. 162

format的第一个参数是格式字符串,其中可以包含任意多个像%.3f这样的转换符。针对每一个转换符,format会按照其格式替换后面表达式或参数的值。format基本上支持ANSI C的sprintf定义的所有转换符,如%d表示十进制整数,%x表示十六进制整数,%e表示指数形式的实数。

在TCL中 format命令的重要性不像C语言中的printf那样显著。很多时候使用 printf和 sprintf就是为了把二进制数值转化为字符串,从而进行字符串替换操作。Tcl不需要这样转化,因为这些值已经存储为字符串形式了,字符串替换操作可以直接由Tcl解释器完成。例如以下命令:

set msg [format "%s is %d yearsold" $name $age]

可以写成如下更简洁的形式

set msg "$name is $age years old

format命令中的%d转换符也可以用%s代替, format会把age的值转化为二进制整数,然后又会把它转化为一个字符串。

在Tcl里使用 format,通常是为了改变一个值的格式,以改善显示效果,或者把它从某种表现形式改为另一种表现形式(例如上面的例子,从十进制改为十六进制)。作为改变格式的一个示例,下面这段脚本输出e的前十次幂的列表。

for {set i 1} {$i <= 10} {incr i} {

puts [format "%4d %12.3f" $i [ expr exp($i)]]

}

显示结果如下:

format的第二项主要用途是改变一个值的表现形式,例如下面的脚本输出了与特定的整型值对应的ASCI字符。

for {set i 95} {$i <=101} {incr i} {

puts [ format "%4d    %c”$i $i]

}

显示结果如下:

在format命令中,i的值被使用了两次,一次是%4d,一次是%c。%c指明读入整型参数,将其表现形式改为ASCII中与该整数相对应的字符。

这个示例过程重复使用了i的值,也可以在格式字符串中使用位置符来完成相同的过程。如果%是转换符,并且紧跟着一个整数和$符号,如%2$d,那么要转换的就不是下一个参数了,而是由这个数字代表的参数,这里1代表的是第一个参数。有了位置符,就可以把同一个参数使用任意次。然而,只要格式字符串中有一个转换符使用了位置符,那么所有的转换符都必须使用位置符。下面这个过程输出的结果与前面的脚本相同:

for {set i 95} {$i <= 101} {incr i} {

puts [format "%1$4d   %1$c" $i]

}

个人公众号“数字化设计CAX联盟”,欢迎关注,共同交流
标签:
为您推荐:

给我留言

© 坐倚北风 版权所有 严禁镜像复制 苏ICP备15034888号. 基于 Ality 主题定制 AliCMS
联系邮箱:leanwind@163.con,微信公众号:数字化设计CAX联盟

用户登录

分享到: