Заменить в тексте программы все вызовы элементов массива на сами элементы
Создано: 16-09-2009 08:48:10  Метки: tcl

array set lang {
### тут элементы массива
}
# открываем файл
set fl [open $argv r]
set a [read $fl]
close $fl
foreach n [array names lang] {
    # здесь получаем {\$lang\(name\)} или {\$::lang\(name\)}
    set rep \{\\\$(::)*lang\\($n\\)\}
    # замена - применяем eval чтобы подменить регулярку значением переменной
    # экранируем все что не нужно менять - получаем что-то типа:
    # set a [regsub -all {\$lang\(name\)} $a "$lang(name)"]
    set a [eval "regsub -all $rep \$a \"$lang($n)\""]
}
# пишем результат
set wr [open $argv w]
puts $wr $a
close $wr
1405 просмотров комментировать