File 使用tcl将行追加到特定位置的文件
我正在尝试这样做:File 使用tcl将行追加到特定位置的文件,file,insert,append,tcl,line,File,Insert,Append,Tcl,Line,我正在尝试这样做: 我有一个文本文件,其中有一行以特定模式开头: vvdd视频显示器 我需要定位此行,并在其后插入另一行,带有模式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} {
vvdd视频显示器
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
设置文件名“path265.spi”
设置第0行
设置计数0
设置模式“vvdd vdd”
设置fp[打开$filename r+]
而{[get$fp line]!=-1}{
递增计数1
如果{[regexp$pattern$line]}{
设置行\u无$count
}
}
寻找$fp 0
对于{set i 0}{$i您可以使用::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]
}
等等
文件:文件包、、、、、