Озадачен условием конца файла в Common Lisp

не могу прочитать текстовый файл.

ЧТЕНИЕ: входной поток #1=# достиг своего конца [Условие типа SYSTEM::SIMPLE-END-OF-FILE]

что означает "достиг своего конца".


person 1.618    schedule 15.12.2009    source источник
comment
Когда это происходит? Какой файл вы пытаетесь прочитать?   -  person itowlson    schedule 15.12.2009


Ответы (2)


Ознакомьтесь с документацией в HyperSpec:

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

По умолчанию READ, READ-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)))
person Jorge Gajon    schedule 15.12.2009
comment
Кроме того, имейте в виду, что READ анализирует прочитанный текст в объекты Лиспа, и если текст недействителен, будет сообщено об ошибке. - person Jorge Gajon; 15.12.2009

Это означает, что вы прочитали все данные, доступные в том месте, где вы открыли поток, а затем попытались прочитать еще немного.

person bmargulies    schedule 15.12.2009