TCL:使用扫描从字符串中获取一个数字

时间:2013-10-25 09:55:47

标签: tcl

我有以下字符串:

  set operating_period          "1.86ns"    ; # set dominant default period , from create_clock command in sdc

我想从中得到这个数字。所以结果应该是 1.86

有任何建议如何在TCL中做到这一点? 我试过扫描,但显然我失败=(...

2 个答案:

答案 0 :(得分:2)

使用扫描:

% set operating_period "1.86ns"
1.86ns
% set x [scan $operating_period %f]
1.86

http://www.tcl.tk/man/tcl8.6/TclCmd/scan.htm

http://www.tcl.tk/man/tcl8.6/TclCmd/format.htm

答案 1 :(得分:1)

有时,在处理特别错误的数据(例如,任何人自由形式的文件)时,您必须使用多种技术来提取数据。例如,您可以同时使用regexpscan

set inputString "wow yet 183.326ns another float"
if {[scan [regexp -inline {[\d.]+ns} $inputString] "%f" value] == 1} {
    # Found something! It's in $value now
}

regexp进行提取(-inline很好;它使regexp返回匹配的内容)和scan“从发现的内容中提取意义”并存储$value中的一个合理的浮点数,假设首先存在任何位置。您可能需要调整RE以获得最佳结果(例如,当前现在不会处理负数)。