Gauche - ファイル読み込みのサンプル
gaucheでファイルを読み込むやり方のメモ。
一行ずつ読み込んで処理する
(call-with-input-file "/Users/kanno/tmp/codes/a.scm" (lambda (in) (port-for-each (lambda (line) ; 1行ずつ行う何かしらの処理 (print line)) (cut read-line in))))
一度に読み込んで処理する
Shiroさんより教えて頂いた。
@kanno_kanno タイミングが難しいので、with-input-from-fileとport->string-lseqの組み合わせになりますね。
— Shiro Kawai (@anohana) 2017年5月4日
@kanno_kanno 私の方も読み直してて気づきましたが、file->string-lseqというのがあるような書き方でしたね。仮想的にそういうものを作りたくてもファイルを閉じるタイミングが難しいので作れないから遅延リストを使うならport->string-lseqを使ってね、という意図でした。
— Shiro Kawai (@anohana) 2017年5月5日
; 1度に全部読み込んでリストにする (use file.util :prefix file:) (dolist [line (file:file->string-list "/Users/kanno/tmp/codes/a.scm")] ; 1行ずつ行う何かしらの処理 (print line)) ; dolistを使わずfor-eachでもよい (for-each (lambda (line) ; 1行ずつ行う何かしらの処理 (print line)) (file:file->string-list "/Users/kanno/tmp/codes/a.scm"))
ちなみにリストではなく文字列そのまま受け取る場合はfile->string
というのもある。
(use file.util :prefix file:) (file:file->string "/Users/kanno/tmp/codes/a.scm")