2 Stimmen

Rätselhafte End-of-File-Bedingung in Common Lisp

Kann Textdatei nicht lesen.

READ: Eingangsstrom #1=# hat sein Ende erreicht [Bedingung vom Typ SYSTEM::SIMPLE-END-OF-FILE]

was bedeutet: "hat sein Ende erreicht".

5voto

Jorge Gajon Punkte 1729

Sehen Sie sich die Dokumentation im HyperSpec an:

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

Standardmäßig, READ , READ-CHAR und ähnliche Funktionen signalisieren eine Bedingung des Typs END-OF-FILE wenn keine Daten mehr aus dem Stream zu lesen sind.

Wenn Sie stattdessen einen bestimmten Wert zurückgeben möchten, wenn Sie versuchen, über das Ende des Streams hinaus zu lesen, müssen Sie eine nil zum eof-error-p Parameter der Funktion und einen Wert, ein Symbol oder ein Schlüsselwort an den eof-value Parameter der Funktion; das sind die Daten, die Sie zurückbekommen, wenn das Ende der Datei/des Streams erreicht ist.

Zum Beispiel, wenn Sie die Zeichen eines Textes einzeln lesen würden:

(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)))

2voto

bmargulies Punkte 94152

Das bedeutet, dass Sie alle Daten gelesen haben, die an dem Ort verfügbar sind, an dem Sie den Stream geöffnet haben, und dann versucht haben, weitere Daten zu lesen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X