2013-02-28 65 views
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 t執行它或什麼的...它工作正常,直到這一行的每一行...

謝謝!

+1

我們不能解決你目前的問題的工作以前沒有看到裏面的'while'代碼;你目前沒有向我們展示過的任何東西都可以拋出這個錯誤(這肯定來自列表解析器,許多Tcl命令都使用這個錯誤)。請複製並粘貼它。此外,從'errorInfo'全局變量中獲取錯誤跟蹤將會很有幫助。 (你在雞蛋裏面嗎?這是我知道的唯一的Tcl軟件,默認情況下不會告訴你錯誤痕跡...) – 2013-03-03 08:07:20

回答

0

只是需要把這個與$line

set bugfree_line [regexp -all -inline {\S+} $line] 
2

我不知道你在做什麼。 eof正在測試文件結束條件 - 使用它「裸」就像沒有做任何事情。 Tcl正在評估[eof $ logfile_fd]爲0,然後嘗試執行不存在的命令!0。

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

,或者,如果你想存儲爲以後的結果,你可以這樣做::

它,如果你碰到這樣的工作

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

但是,在執行像你,我不知道你可能想要得到的任何副作用,而不使用返回值(除非文件描述符無效則拋出錯誤)。

+0

我想,如果你使用交互式Tcl,你可能想知道你是否在文件末尾(儘管如此,你可以自己輕鬆解釋eof $ logfile_fd的結果)。但是,如果是這種情況,您需要將其更改爲expr {![eof $ logfile_fd]}以顯示您想要的結果。解釋是這樣的!沒有expr之外的含義,所以你現在剛剛做了一個字符串連接!和eof的結果 - 你需要評估它以得到你所期望的否定行爲。 – ramanman 2013-02-28 19:39:09

+0

嘿,首先,謝謝... 我只是想讓它更簡單,所以我只寫了'![eof $ logfile_fd]',但實際上我用它作爲'while'條件, 'while'我讀了所有的行,直到文件結束(eof)... 我認爲它與'lists'和'$ logfile'本身有關係。 我試着用另一種方法讀行: 'set file_data [read $ fp];一組數據[分裂$ file_data「\ n」] 的foreach線$ {數據# 做一些線加工這裏 }' ,我得到了另一個錯誤關心一些名單的事情... – hudac 2013-02-28 20:03:07

+0

@hudac:如果你正在閱讀從循環中的文件開始,使用'while {[gets $ fp line]> = 0} {...用$ line ...做一些事情}'(因爲'gets'的雙參數形式返回行長度,或在EOF -1)。 – 2013-03-01 07:29:57