Lispでファイル読み書き
Lispでファイルを読み書きする場合、
- ファイルのPATHを取得
- そのPATHからストリームを生成
- ストリームに対して読み書き実行
- ストリームをクローズ
という流れになる。
簡単な内容だが、サンプルは以下のような感じ。
(defun file-write (message) (let ((stream (open (make-pathname :name "test.txt") :direction :output :if-exists :supersede))) (format stream message) (format stream ".~%") (close stream))) (defun file-read (path) (let ((stream (open (make-pathname :name path) :direction :input))) (format t "~a~%" (read-line stream)) (close stream)))
書き込み専用で開くときは、:outputとし、読み込み専用の場合は:inputとする。両方やりたい場合は、:ioとすればよいらしい。
でもまだこれだけの実装だと、
- 書き込みは追記ではなく、上書きになってしまう
- 読み込みは1行しか読み込まない
というかなり不完全な状態。またここから完成度を上げるために勉強していかねば!