2016-04-26 235 views
0

有在TCL的命令,它允許通過更換現有的基礎上創建新的字符串:Tcl。在文件替換字符串

string map ?-nocase? mapping string 

是否有TCL允許改變現有的字符串命令? 例如:

set string1 abcabcabc 

通過使用一些命令替換字母 「a」,由 「0」 來獲得與價值字符串1 0bc0bc0bc

回答

1

儘管@peter解決方案工作得很好。

若要不fileutil包在文件TCL替換string

set fd [open "filename.txt" r] 
set newfd [open "filename.txt.tmp" w] 
while {[gets $fd line] >= 0} { 
    set newline [string map {a 0} $line] 
    puts $newfd $newline 
} 

close $fd 
close $newfd 
file rename -force "filename.txt.tmp" "filename.txt" 
+0

或'設置F [開放file.txt的R +]; puts -nonewline $ f [string map {a 0} [read $ f]] [seek $ f 0; list];關閉$ f';)工作也一樣,但我不會推薦它用於生產代碼。 –

+0

@PeterLewerin「不會推薦它用於生產代碼」 - 你可以再說一遍!雖然它確實無法保證安全,但很容易引入錯字並使其不真實。 OTOH,它值得考慮一次轉換文件全部內容的方法。即使對於許多兆字節的文件,使用這種方式也很容易。 –

+0

非常感謝! –

1
% set string1 abcabcabc 
abcabcabc 
% set string1 [string map {a 0} $string1] 
0bc0bc0bc 

在文件中替換(文件「file.txt的「載abcabcabc):

% package require fileutil 
% ::fileutil::updateInPlace file.txt {string map {a 0}} 
% ::fileutil::cat file.txt 
0bc0bc0bc 

文檔:fileutil包,packagesetstring