我想用tcl追加两个同时行,怎么做?

时间:2013-01-02 16:35:25

标签: tcl

假设我的文件包含

we must greap the ep
the whole ep
endpoint: /usr/home/bin/tcl_
giga/hope (v)
beginpoint" /usr/home/bin/lp50 (^)

我只想在一行中打印端点路径,即/ usr / home / bin / tcl_giga / hope。

任何人都可以帮助我。其实我写的代码如下: -

set fp [open "text" "r+"]
while {![eof $fp]} {
    gets $fp line
    puts $line
    if {[regexp {endpoint:} $line]} {
        set new_line $line
        puts $new_line
    }
}

但这只是打印第一个终点线。

2 个答案:

答案 0 :(得分:0)

这是一种方法。它允许您在“endpoint:”行之后更改要打印的行数。

set printNMore 0
while {[gets $fp line] >= 0} {
  if {[string first "endpoint:" $line] >= 0} {
    set printNMore 2
  }
  if {$printNMore > 0} {
    puts $line
    incr printNMore -1
  }
}

答案 1 :(得分:0)

一次执行该行的最简单方法是:

set fp [open "text" "r+"]
while {[gets $fp line] >= 0} {
    if {[string match "endpoint: *" $line]} {
        puts -nonewline [string range $line 10 end]
        # Plus the whole of the next line...
        puts [gets $fp]
    }
}

但是,如果我自己这样做的话,我会立即将整个文件丢入并使用正则表达式:

set fp [open "text" "r+"]
set contents [read $fp]
if {[regexp {endpoint: ?([^\n]+)\n([^\n]*)} -> bit1 bit2]} {
    # Print the concatenation of the capture groups
    puts "$bit1$bit2"
}

如果我更清楚地知道文件格式是什么,我可以写出更好的模式......