替换文件中的字符串会覆盖所有内容

时间:2014-08-20 22:22:13

标签: regex file tcl

我有一个名为test.tcl的tcl文件 它有以下信息

TimePlace=12:04:East
Work=None

现在,我想将TimePlace替换为CreateTime,以便内容变为

CreateTime=12:04:East

我做了以下但不知何故旧内容被删除了。 Work=None消失了。

set filename [open "test.tcl" "w"]
regsub -all "TimePlace" $filename "CreateTime" filename
close $filename

我无法弄清楚我错过了什么。 TCL新手。你能指点一下吗?

1 个答案:

答案 0 :(得分:3)

嗯,第一个问题是您打开文件以便使用open "test.tcl" "w"进行书写。这样做会清除文件中的所有内容。对于初学者,我建议打开文件进行单独的阅读和写作。

但这不是这个部分的唯一问题,filename是频道的名称(你可以说它就像一个中间名,tcl将通过它与文件进行通信)而不是文件本身的内容

set filename [open "test.tcl" "r"] ;# Create a channel named 'filename' for reading
set contents [read $filename]      ;# Read the contents of the file and store in contents
close $filename                    ;# Close the file since we don't need to read it more than that

之后,您可以替换:

regsub -all "TimePlace" $contents "CreateTime" contents

这将使用TimePlace替换文件中CreateTime的所有匹配项。


请注意,上述替换不使用正则表达式,因此您也可以使用string map来获得相同的结果:

set contents [string map {TimePlace CreateTime} $contents]

然后打开文件进行编写:

set filename [open "test.tcl" "w"] ;# Open the file for writing and erasing all contents
puts $filename $contents           ;# Write '$contents' to the file
close $filename                    ;# Close the file.