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

只需要把这个,在使用之前$line

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