在 Tcl 脚本中,format
是一个非常灵活的字符串格式化工具,适用于各种需要格式化输出的场景。以下是常用的情况:
1. 对齐文本输出
format
可以用来对齐输出文本,常见于日志、表格或终端展示。
示例:
set header [format "%-10s %-10s %-10s" "Name" "Age" "Score"]
puts $header
set row1 [format "%-10s %-10d %-10.2f" "Alice" 25 95.5]
puts $row1
说明:
%
后的字符定义了格式:%-10s
表示左对齐,宽度为 10 的字符串;%-10d
是整数;%-10.2f
是保留两位小数的浮点数。- 输出示例:
Name Age Score
Alice 25 95.50
2. 格式化数字
示例1:格式化浮点数
set pi 3.1415926535
puts [format "Pi is approximately %.2f" $pi]
说明:%.2f
表示保留两位小数。 输出:Pi is approximately 3.14
示例2:填充零
set number 42
puts [format "%05d" $number]
说明:%05d
表示宽度为 5,不足的部分用 0 填充。 输出:00042
3. 输出百分比
示例:
set part 25
set total 100
puts [format "Completion: %.1f%%" [expr $part * 100.0 / $total]]
说明:%.1f%%
表示保留一位小数的浮点数,并输出百分号。 输出:Completion: 25.0%
4. 动态宽度和精度
通过指定变量来动态控制宽度或精度。
示例:
set width 10
set precision 3
set value 3.141592
puts [format "%*.*f" $width $precision $value]
说明:
%*.*f
:第一个*
表示宽度由变量提供,第二个*
表示小数精度由变量提供。 输出:3.142
(宽度为 10,小数保留 3 位)
5. 输出十六进制、八进制、字符等
示例1:十六进制和八进制
set num 255
puts [format "Hex: 0x%X, Oct: %o" $num $num]
说明:
%X
输出大写十六进制,%o
输出八进制。 输出:Hex: 0xFF, Oct: 377
示例2:ASCII 字符
set code 65
puts [format "Character: %c" $code]
说明:%c
将数字转换为对应的 ASCII 字符。 输出:Character: A
6. 处理文件路径或日期
示例1:对齐路径
set filepath "/home/user/docs"
puts [format "Path: %-20s" $filepath]
示例2:格式化日期
set year 2024
set month 11
set day 28
puts [format "Date: %04d-%02d-%02d" $year $month $day]
说明:%04d
表示宽度为 4,不足补 0;%02d
表示宽度为 2,不足补 0。 输出:Date: 2024-11-28
7. 生成固定格式的日志或报告
示例:
set log [format "[%s] %-10s: %s" [clock format [clock seconds] -format "%Y-%m-%d %H:%M:%S"] "INFO" "Process started"]
puts $log
说明:
- 使用
clock format
获取当前时间。 [%s]
是时间戳,%-10s
是宽度为 10 的左对齐标签,最后是日志信息。 输出:[2024-11-28 16:30:45] INFO : Process started
8. 用作调试工具
format
可以快速格式化调试信息。
示例:
set variable1 10
set variable2 20
puts [format "Debug: var1=%d, var2=%d" $variable1 $variable2]
总结
format
在 Tcl 中的常用情况包括:
- 对齐输出:格式化表格或日志内容。
- 数字处理:保留小数、填充零、输出百分比等。
- 字符与编码:十六进制、八进制、ASCII 等。
- 动态调整:动态控制宽度和精度。
- 日志和调试:生成统一格式的输出,方便阅读和调试。