2013-04-09 45 views
1

我的代碼這一艱鉅塊:寫出的變量文本值到文件

exec zip -r $FULLPATH error.log [ append datetime $RECENT ".bwdb" ] [ append txt $testName ".txt" ] [ append lancap $testName "-lan.cap" ] \ 
     [ append lanmcap $testName "-lan-m.cap" ] [ append wancap $testName "-wan.cap" ] [ append wanmcap $testName "-wan-m.cap" ] [ append conf $confFile ".conf" ] \ 
     start.txt start-lan.cap start-lan-m.cap start-wan.cap start-wan-m.cap [ append comments "comments-" $RECENT ".bwc" ] 

這實際上只是荏苒一堆文件一起。我正在改變生成zip文件的方式(更準確地說,當我生成時,我正在更改)。我決定這樣做的方式是將每個命令保存到文本文件中,然後在需要創建文件時通過文件中的每個命令。問題是我有一堆我需要轉換成文字形式的變量。

有誰知道我該如何將此命令轉換爲它的文字值並將其存儲到文本文件中?

編輯:我也願意聽到其他建議,以解決相同的問題,和/或任何利弊做我的建議。

EDIT2:感謝所有幫助,我選擇這樣做:

set data123 "exec zip -r $FULLPATH error.log [ append datetime $RECENT \".bwdb\" ] [ append txt $testName \".txt\" ] [ append lancap $testName \"-lan.cap\" ] \ 
     [ append lanmcap $testName \"-lan-m.cap\" ] [ append wancap $testName \"-wan.cap\" ] [ append wanmcap $testName \"-wan-m.cap\" ] [ append conf $confFile \".conf\" ] \ 
     start.txt start-lan.cap start-lan-m.cap start-wan.cap start-wan-m.cap [ append comments \"comments-\" $RECENT \".bwc\" ]" 

set datafile123 "datafile123.txt" 
set fileId123 [ open $datafile123 "w" ] 
puts $fileId123 $data123 
close $fileId123 

然而,當我看到生成的文件我看到:

exec zip -r /home/IOL/TR069_Certification/Results/TEST_Round99_GetRPCMethods_CDR1_20130410172812 error.log 20130410172812.bwdb20130410172812".bwdb" GetRPCMethods.txtGetRPCMethods".txt" GetRPCMethods-lan.capGetRPCMethods"-lan.cap" GetRPCMethods-lan-m.capGetRPCMethods"-lan-m.cap" GetRPCMethods-wan.capGetRPCMethods"-wan.cap" GetRPCMethods-wan-m.capGetRPCMethods"-wan-m.cap" IOL.confIOL".conf" start.txt start-lan.cap start-lan-m.cap start-wan.cap start-wan-m.cap comments-20130410172812.bwc"comments-"20130410172812".bwc" 

這似乎是製作連接字符串的第二個副本在每個附加的末尾,我無法弄清楚爲什麼。

回答

0

我基本上只是做你的建議:將文字值寫入文本文件。 一種方式做,這將是如此簡單:

set s "" 
append s \ 
    error.log \n \ 
    $datetime $RECENT .bwdb \n \ 
    $txt $testName .txt \n \ 
    $lancap $testName -lan.cap \n \ 
    $lanmcap $testName -lan-m.cap \n \ 
    $wancap $testName -wan.cap \n \ 
    $wanmcap $testName -wan-m.cap \n \ 
    $conf $confFile .conf \n \ 
    start.txt \n start-lan.cap \n \ 
    start-lan-m.cap \n start-wan.cap \n start-wan-m.cap \n \ 
    $comments comments- $RECENT .bwc 
set f [open /path/to/file w] 
puts $f $s 
close $f 

這將創建每行一個文件名的文本文件。

另一個—更直接—返工看起來是這樣的:

set files [list] 
lappend files \ 
    error.log \ 
    [ append datetime $RECENT ".bwdb" ] \ 
    [ append txt $testName ".txt" ] \ 
    [ append lancap $testName "-lan.cap" ] \ 
    [ append lanmcap $testName "-lan-m.cap" ] \ 
    [ append wancap $testName "-wan.cap" ] \ 
    [ append wanmcap $testName "-wan-m.cap" ] \ 
    [ append conf $confFile ".conf" ] \ 
    start.txt start-lan.cap start-lan-m.cap start-wan.cap start-wan-m.cap \ 
    [ append comments "comments-" $RECENT ".bwc" ] 
set f [open /path/to/file w] 
puts $f [join $files \n] 
close $f 

我懷疑這個用法append雖然這裏這個命令似乎爲它的副作用,不能僅使用。 append將其第二個到最後一個參數的字符串附加到位於變量名稱中的字符串,該變量的名稱作爲其第一個參數傳遞,返回結果字符串。我不喜歡這樣的事實,即在你原來的例子中(在我的第二個例子中)append似乎只用於那個返回值。

所以可能更習慣的方法是使用簡單的字符串拼接的Tcl的方式是這樣的:

set files [list] 
lappend files \ 
    error.log \ 
    ${datetime}${RECENT}.bwdb \ 
    ${txt}${testName}.txt \ 
    ${lancap}${testName}-lan.cap \ 
    ${lanmcap}${testName}-lan-m.cap \ 
    ${wancap}${testName}-wan.cap \ 
    ${wanmcap}${testName}-wan-m.cap \ 
    ${conf}${confFile}.conf \ 
    start.txt start-lan.cap start-lan-m.cap start-wan.cap start-wan-m.cap \ 
    ${comments}comments-${RECENT}.bwc 
set f [open /path/to/file w] 
puts $f [join $files \n] 
close $f 
+0

非常感謝TCL提示。我在工作時只是被扔進了一個tcl項目,而我一直在自我教導自己,所以這些東西偶爾會出現。 – Joshua 2013-04-10 21:34:57

2

爲什麼不是簡單的字符串?你知道一個"字符串可以跨越多行嗎?

set f [open /p/t/f w] 
puts $f "error.log 
$datetume$RECENT.bwdb 
$txt$testName.txt 
$lancap$testName-lan.cap 
$lanmcap$testName-lan-m.cap 
$wancap$testName-wan.cap 
$wanmcap$testName-$wan.cap 
$conf$confFile.conf 
start.txt 
start-lan.cap 
start-lan-m.cap 
start-wan.cap 
start-wan-m.cap 
${comments}comments-$RECENT.bwc" 
close $f 

編輯:你不應該縮進跟進線,否則這會縮進結果文件中顯示出來。
我個人通常使用模板文件,並使用subst來替換變量。

+0

我喜歡你的答案。 – kostix 2013-04-09 20:39:21