通过常见的lisp中的文件结束条件进行了解惑

时间:2009-12-15 01:51:45

标签: lisp common-lisp

无法读取文字文件。

READ:输入流#1 =#已到达终点    [SYSTEM :: SIMPLE-END-OF-FILE]的条件

什么方式“已经到了终点。”

2 个答案:

答案 0 :(得分: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 :(得分:2)

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