错误:[eof $ FILE_NAME]

时间:2013-02-28 17:41:35

标签: tcl

我正在尝试在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会尝试执行它或者某些东西......它可以正常运行,直到这一行......

谢谢!

2 个答案:

答案 0 :(得分:2)

我不确定你要做什么。 eof正在测试文件结束条件 - 使用它“裸”就像没有做任何事情。 Tcl正在将[eof $ logfile_fd]评估为0,然后尝试执行命令!0,该命令不存在。

如果您有以下内容,它确实有效:

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

或者,如果您想稍后存储结果,可以执行以下操作:

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

但是,像你一样执行,我不知道你可能想要在不使用返回值的情况下获得任何副作用(除了在文件描述符无效时抛出错误)。

答案 1 :(得分:0)

在使用$line

之前,只需要这样做
set bugfree_line [regexp -all -inline {\S+} $line]