可以使用WITH-OPEN-FILE宏打开文件以作为流读取。
(with-open-file (file #P"test.file") (loop for i from 0 for line = (read-line file nil nil) while line do (format t "~d: ~a~%" i line))) ; 0: Foobar ; 1: Barfoo ; 2: Quuxbar ; 3: Barquux ; 4: Quuxfoo ; 5: Fooquux ;=> T
可以使用OPEN和手动进行相同操作CLOSE。
(let ((file (open #P"test.file")) (aborted t)) (unwind-protect (progn (loop for i from 0 for line = (read-line file nil nil) while line do (format t "~d: ~a~%" i line)) (setf aborted nil)) (close file :abort aborted)))
请注意,READ-LINE为每行创建一个新字符串。这可能很慢。一些实现提供了一种变体,可以将一行读入字符串缓冲区。示例:READ-LINE-INTO用于Allegro CL。