2012-01-03 84 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