0

TCLでスクリプトを書こうとしているのですが、

次の行でエラーが発生します。![eof $logfile_fd]

エラーは次のとおりです。invalid command name "!0"

何が原因で、どうすれば修正できますか?

if {[file exists $logfile] != 1} {
    puts "Error existence of $logfile"
    return -1
}

if {[catch {set logfile_fd [open "$logfile" r]} err]} {
    puts "Error opening \"$logfile\" $err"
    return -1
}   
seek $logfile_fd 0

![eof $logfile_fd]

私は別の解決策を使用しようとしました:

while {[gets $logfile_fd line] >= 0} {
   ...do something with $line... 
}

しかし、別のエラーが発生しました:

list element in quotes followed by ")\nindexRecordsRead:" instead of space

一方

)\nindexRecordsRead:

内部のテキスト$logfile_fdです... TCLはそれを実行しようとしていると思います...この行まで、他の行ごとに正常に動作します...

ありがとう!

4

2 に答える 2

2

あなたが何をしようとしているのかわからない。eof は、ファイルの終わりの状態をテストしています。そのように「そのまま」使用しても何もしません。Tcl は [eof $logfile_fd] を 0 に評価し、存在しないコマンド !0 を実行しようとしています。

次のようなものがある場合は機能します。

if {![eof $logfile_fd]} {
  //do something
}

または、後で結果を保存する場合は、次のようにします。

set isEndOfFile [expr {![eof $logfile_fd]}]

しかし、あなたのように実行すると、戻り値を使用せずに取得したい副作用についてはわかりません(ファイル記述子が無効な場合にエラーをスローする以外)。

于 2013-02-28T19:35:07.833 に答える
0

Just need to put this, before working with $line

set bugfree_line [regexp -all -inline {\S+} $line]
于 2013-03-03T11:53:53.253 に答える