ファイルを開き、EOF まで各行を読み取るのに苦労しています。私は、XLISP に基づいた nyquist を使用していますが、Common Lisp のwith-open-file
. 私のコードは次のとおりです。
(let ((in_file (open "/home/soodesune/testfile.csv" :if-does-not-exist nil)))
(loop for line = (read-line in_file)
while line do (print line))
(close in_file))
ナイキストから得られる出力は次のとおりです。
error: unbound variable - LINE
どこが間違っているのかを理解する助けが欲しい
注:私も試しました:
(loop for line = (read-line in_file nil)
しかし、それは次のようになります:
error: too many arguments
アップデート:
Rainer Joswig が提供した情報とリンクを使用して、ファイルを開いて行ごとに読み取るために使用する典型的なコードを見つけることができました。
1 (do* ((fp (open "test.dat" :direction :input))
2 (ex (read fp nil) (read fp nil)))
3 ((null ex) (close fp) nil)
4 (print ex))
このdo
関数には、次の 3 つの基本部分があります。
- 1 行目と 2 行目 - ループで使用するために割り当てられた変数、それらの初期値、およびそれらをインクリメントする方法。この場合
fp
とex
.fp
はインクリメントされず、fp からex
初期化されて 1 ずつインクリメントされます(末尾が何のためにあるのかわかりません)read
nil
- 3 行目 - ループの終了条件と、
return expressions
終了時に評価され、最後に返されるすべてのリスト。この場合、 exit がいつ発生しex == null
、その後nil
返されます - 4 行目 - ループの実際の本体。この場合、自明です。
注:の割り当てで使用される方法のように、ある式で割り当てられた変数を後の式で使用できるという点でdo*
とは異なります。do
fp
ex
私はあらゆる種類の LISP に無頓着なので、上記のいずれかが間違っている場合は、率直に言ってください。