0

假设我的文件包含

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

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

4

2 回答 2

0

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

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
  }
}
于 2013-01-02T17:42:00.540 回答
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"
}

如果我知道更精确的文件格式,我可以写出更好的模式……</p>

于 2013-01-02T22:59:32.103 回答