[英]appending line to a file in a specific location using tcl
我正在尝试这样做:
vvdd vdd
vvss vss
到目前为止,这是我的插入错误位置的代码:
set filename "path265.spi"
set line_no 0
set count 0
set pattern "vvdd vdd"
set fp [open $filename r+]
while {[gets $fp line] != -1} {
incr count 1
if {[regexp $pattern $line]} {
set line_no $count
}
}
seek $fp 0
for {set i 0} {$i<$line_no} {incr i} {gets $fp replace}
puts $fp "\nvvnw vnw 0 1.08"
puts $line_no
puts $count
close $fp
您可以使用::fileutil::updateInPlace
简化操作。
package require fileutil
proc change {pattern newtext data} {
set res {}
foreach line [split $data \n] {
lappend res $line
if {[regexp $pattern $line]} {
lappend res $newtext
}
}
return [join $res \n]
}
::fileutil::updateInPlace path265.spi {change "^vvdd vdd" "vvss vss"}
updateInPlace
命令采用文件名和命令前缀。 它将文件的内容添加到该命令前缀并调用它,然后将结果写回到文件中。
在这种情况下,调用的命令在文件的各行中进行迭代,并在与$pattern
匹配的每一行之后添加$newtext
。 这只是编写进行更改的过程的一种方法。 如果仅第一个匹配是相关的,则可以使用:
proc change {pattern newtext data} {
set lines [split $data \n]
set index [lsearch -regexp $lines $pattern]
if {$index >= 0} {
set lines [linsert $lines $index+1 $newtext]
}
return [join $lines \n]
}
等等
文档: fileutil软件包, foreach , if , lappend , linsert , lsearch , package , proc , regexp , return , set , split
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.