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

TCL:使用扫描从字符串中获取数字,tcl,Tcl,我有以下字符串: set operating_period "1.86ns" ; # set dominant default period , from create_clock command in sdc 我想知道这个数字。所以结果应该是 1.86 对于如何在TCL中做到这一点,有什么建议吗? 我尝试了扫描,但显然失败=(…使用扫描: % set operating_period "1.86ns" 1.86ns % set x [scan $operating

我有以下字符串:

  set operating_period          "1.86ns"    ; # set dominant default period , from create_clock command in sdc
我想知道这个数字。所以结果应该是 1.86

对于如何在TCL中做到这一点,有什么建议吗? 我尝试了扫描,但显然失败=(…

使用扫描:

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


有时,在处理格式特别不正确的数据(例如,任何由人自由编写的内容)时,您必须使用多种技术来提取数据。例如,您可以同时使用
regexp
scan

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以获得最佳结果(例如,当前的RE不会立即处理负数)。

无需担心…我做到了!lindex[split[lindex[split$string\“]1]ns]0这很恶心,但它有效=)!是的,对!但是这个数字只是一个例子。我想从这个位置得到一个任意的数字。怎么做?它的工作原理是一样的:扫描1ns%f->1.0,扫描1.8ns%f->1.8等等。我想你不明白这个问题。如果这个数字是固定的,我不需要编写代码来得到它…只要键入它^^。我正在寻找类似于“扫描$string%f”,结果是字符串变量中的数字。该字符串与上面的字符串类似,只是数字未知…您的genius公式导致上面的示例“0”"... 这是因为扫描不会直接输出扫描结果,而只输出点击数。所以在本例中,它没有找到任何东西。难以置信,对吧?!