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 を 1 行で出力したいだけです。

誰でも同じことについて私を助けることができますか?実際、私は自分のコードを次のように書いています:-

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

これは 1 つの方法です。「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
  }
}
于 2013-01-02T17:42:00.540 に答える
0

一度に 1 行ずつ行う最も簡単な方法は、次のようなものです。

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 に答える