假设我的文件包含
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
}
}
但这只是打印第一个终点线。
答案 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"
}
如果我更清楚地知道文件格式是什么,我可以写出更好的模式......