我有一个名为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新手。你能指点一下吗?
答案 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.