Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
File 使用tcl将行追加到特定位置的文件_File_Insert_Append_Tcl_Line - Fatal编程技术网

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]
    }
    
    等等

    文件:文件包、、、、、