2009-12-15 48 views
1

无法读取文本文件。由文件结束条件引起的共同lisp

READ: “已经达到它的端部” 输入流#1 =#已经到达其端 [类型的系统条件:: SIMPLE-END-OF-FILE]

什么装置被

+0

当发生这种情况?你想要读什么文件? – itowlson 2009-12-15 01:57:32

回答

2

这意味着您已经读取了您打开流的位置处的所有可用数据,然后尝试阅读更多内容。

4

退房在HyperSpec的文档:

http://www.lispworks.com/documentation/HyperSpec/Body/f_rd_rd.htm

默认情况下,READREAD-CHAR,以及类似的功能将信号END-OF-FILE时,有没有更多的数据类型的条件,从流中读取。

如果您希望它在尝试读取流末尾时返回特定值,则需要将nil传递给函数的参数eof-error-p,并将值,符号或关键字传递给功能参数eof-value;这是在到达文件/流结束时您将返回的数据。

例如,如果您单独一段文本读取字符:

(with-open-file (s somefile :direction :input) 
    (do ((c (read-char s nil :eof) 
      (read-char s nil :eof))) 
    ((eql c :eof) 'done) 
    (process-char c))) 
+1

另外,请注意,'READ'会将读取的文本解析为Lisp对象,如果文本无效,则会发出错误信息。 – 2009-12-15 06:42:04