2013-04-04 3 views
1

Я пишу сценарий TCL для анализа вывода HTML на консоли профилирования Firebug. Начнем с того, что я просто хочу накапливать количество вызовов методов для каждого файла. Для этого я пытаюсь использовать вложенные словари. Кажется, я правильно понял первый уровень (где файл является ключом, а метод - значением), но не вторым, вложенным уровнем, где метод - это значение, а значение - это ключ.Значение установки ошибки во вложенном словаре

Я прочитал о команде обновления словаря, поэтому я открыт для рефакторинга с использованием этого. Мое использование 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

Вы [не должны разобрать HTML с регулярным выражением] (HTTP : //stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454) –

ответ

2

Команда dict set, как и любой сеттер в Tcl, берет имени переменный в качестве первого аргумента. Держу пари, что:

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}] 

+0

Спасибо, что сделал трюк. –

+1

'$' или no '$', вот в чем вопрос :) –

Смежные вопросы