一个新手问题:(通用Lisp)一次读取一行文件,然后通过击键移到下一行。
有一个标准:
(let ((in (open "/some/file/name.txt" :if-does-not-exist nil)))
(when in
(loop for line = (read-line in nil)
while line do (format t "~a~%" line))
(close in)))
在旧的Fortran中,我习惯了wait
中某个地方的(when in wait 'action...)
函数。
Clojure中有java.io
的解决方案。
那JUST Common Lisp呢?
答案 0 :(得分:6)
首先,应始终使用
with-open-file
代替
open
/ close
。
接下来,ANSI CL标准未指定I / O缓冲,因此存在 否使CL对每个击键做出反应的标准方法。 但是,您可以要求您的用户按下 Enter (或 Return ):
(with-open-file (in path)
(loop for line = (read-line in nil nil)
while line do
(read-line) ; wait for user to hit RET
(format t "--> ~A~%" line)))