ZetCode

Tcl scan 命令

最后修改于 2025 年 4 月 3 日

Tcl scan 命令根据格式说明符解析字符串数据。它类似于 C 的 sscanf 函数。该命令从字符串中提取值并将其分配给变量。

基本定义

scan 命令根据格式字符串解释字符串数据。它返回成功执行的转换次数。

语法:scan string format ?varName varName ...?。格式说明符使用类似于 printf 的转换字符。

基本字符串解析

本示例展示了如何使用 scan 从字符串中提取简单值。

basic_scan.tcl
set data "John 25"
scan $data "%s %d" name age
puts "Name: $name, Age: $age"

这里我们解析一个包含姓名和年龄的字符串。%s 格式提取字符串,而 %d 提取十进制整数。

十六进制转换

scan 可以将十六进制数转换为十进制值。

scan_hex.tcl
set hex "FF"
scan $hex "%x" decimal
puts "Hex $hex is $decimal in decimal"

这会将十六进制值 "FF" 转换为其十进制等效值 255。%x 格式说明符处理十六进制转换。

浮点数

该命令可以从字符串中提取浮点数。

scan_float.tcl
set measurement "12.5cm"
scan $measurement "%f" value
puts "Measurement: $value"

这会从字符串 "12.5cm" 中提取浮点数 12.5。%f 格式说明符处理浮点转换。

多值提取

scan 可以从单个字符串中提取多个值。

scan_multiple.tcl
set coordinates "(3.14, 2.71)"
scan $coordinates "(%f, %f)" x y
puts "X: $x, Y: $y"

这会从坐标字符串中解析两个浮点数。格式字符串匹配输入中的括号和逗号。

字符提取

可以使用 %c 格式提取单个字符。

scan_char.tcl
set word "hello"
scan $word "%c" first_char
puts "First character: [format %c $first_char]"

这会提取第一个字符 'h' 的 ASCII 值。format 命令将其转换回字符以显示。

忽略字符

可以使用 %* 跳过输入字符串中的字符。

scan_ignore.tcl
set data "Name: John, Age: 25"
scan $data "Name: %s, Age: %d" name age
puts "Name: $name, Age: $age"

此示例在提取变量值的同时跳过文字字符串 "Name: " 和 ", Age: "。格式字符串与输入完全匹配。

最佳实践

本教程通过实际示例介绍了 Tcl scan 命令,展示了其在字符串解析和转换中的用法。

作者

我叫 Jan Bodnar,我是一名充满热情的程序员,拥有丰富的编程经验。我从 2007 年开始撰写编程文章。迄今为止,我已撰写了 1400 多篇文章和 8 本电子书。我在编程教学方面拥有十多年的经验。

列出 所有 Tcl 教程