2012-01-03 48 views
1

在我的Tcl脚本中,我使用另一种语言构建源代码。例如,让它成为gnuplot源。我有Tcl的这样的代码:Tcl中的大文本替换

 
# `script' variable contains gnuplot source code 
set script { 
    set terminal pdf 
    set output "chart.pdf" 
    set title "[makeTitle]" 
    plot "$dataFile" using 1:2 title "" 
} 

# Then I write `script' to file for later execution 

注意script变量包含命令调用(makeTitle)和可变取代(dataFile)。源代码本身包含新行,双引号。

问题:我该如何简单地“评估”这个变量,以便用它们的值来替换命令调用的结果和变量?预期结果应该是这样的:

 
    set terminal pdf 
    set output "chart.pdf" 
    set title "R(S) Dependence" 
    plot "r_s.txt" using 1:2 title "" 

回答

7

您正在寻找的subst命令:

set result [subst $script] 
1

一种方法我在这类情况下通常使用使用[string map]用特殊符号。例如:

set script { 
    set terminal pdf 
    set output "chart.pdf" 
    set title "%MAKETITLE%" 
    plot "%DATAFILE%" using 1:2 title "" 
} 
set script [string map [list %MAKETITLE% [makeTitle] %DATAFILE% $datafile] $script] 

在使用[subst]的格伦的回答是一个很好的,并会为你测试的示例代码,它可以作为原始字符串变得更加复杂遇到的问题。特别是,如果包含Tcl将解释为要运行的命令或要替换的变量的字符,则需要转义它们,等等。通过使用string map和非常特定的字符序列来替换,可以限制更改的内容正是你所需要的。

+0

谢谢,这很有趣。 – Andrey 2012-01-06 11:34:16