逐行读取文件,并等待键盘输入读取下一行

时间:2019-01-14 18:51:31

标签: common-lisp

一个新手问题:(通用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呢?

1 个答案:

答案 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)))