我正在编写一个TCL脚本来解析Firebug分析控制台的HTML输出。首先,我只想在每个文件的基础上累积方法调用的数量。为此,我尝试使用嵌套字典。我似乎得到了第一级正确(其中文件是键,方法是值)但不是第二级嵌套级别,其中method是值,count是键。
我已阅读有关字典的更新命令,因此我可以使用此方法进行重构。我的TCL使用次数一次又一次,所以提前感谢任何帮助。下面是我的代码和一些示例输出
foreach row $table_rows {
regexp {<a class="objectLink objectLink-profile a11yFocus ">(.+?)</a>.+?class=" ">(.+?)\(line\s(\d+)} $row -> js_method js_file file_line
if {![dict exists $method_calls $js_file]} {
dict set method_calls $js_file [dict create]
}
set file_method_calls [dict get $method_calls $js_file]
if {![dict exists $file_method_calls $js_method]} {
dict set file_method_calls $js_method 0
dict set method_calls $js_file $file_method_calls
}
set file_method_call_counts [dict get $file_method_calls $js_method]
dict set $file_method_calls $js_method [expr 1 + $file_method_call_counts]
dict set method_calls $js_file $file_method_calls
}
dict for {js_file file_method_calls} $method_calls {
puts "file: $js_file"
dict for {method_name call_count} $file_method_calls {
puts "$method_name: $call_count"
}
puts ""
}
输出:
file: localhost:50267
(?): 0
e: 0
file: Defaults.js
toDictionary: 0
(?): 0
Renderer: 0
file: jquery.cookie.js
cookie: 0
decoded: 0
(?): 0
答案 0 :(得分:2)
dict set
命令与Tcl中的任何setter一样,将变量的名称作为其第一个参数。我敢打赌:
dict set $file_method_calls $js_method [expr 1 + $file_method_call_counts]
应该真的读到:
dict set file_method_calls $js_method [expr {1 + $file_method_call_counts}]
(另外,为速度和安全性提供表达式。)