昨日はファイルからの入力を覚えたので、今日はファイルへの出力。
open-output-file、close-output-port
(open-output-file filename) は filename を出力用に開いてポートを返す。使い終わったら (close-output-port port) でポートを閉じる。
出力は display。newline で改行する。
(define write-to-file (lambda (file-name message) (let ((p (open-output-file file-name))) (begin (display message p) (newline p) (close-output-port p)))))
実行例:
gosh> (load "write-to-file1.scm") #t gosh> (write-to-file "hello1.txt" "Hello, world.") #<undef> gosh> (exit) ^o^ > type hello1.txt Hello, world.
call-with-output-file
(call-with-output-file filename procedure) は filename を出力用に開いて procedure を評価する。procedure はポートを引数に取る関数。
(define write-to-file (lambda (file-name message) (call-with-output-file file-name (lambda (p) (begin (display message p) (newline p) (close-output-port p))))))
実行例:
gosh> (load "write-to-file2.scm") #t gosh> (write-to-file "hello2.txt" "Hello, scheme.") #<undef> gosh> (exit) ^o^ > type hello2.txt Hello, scheme.
with-output-to-file
(with-output-to-file filename procedure) は filename を標準入力として開き、procedure を評価する。procedure は引数なしの関数。終わったらポートは勝手に閉じられる。
(define write-to-file (lambda (file-name message) (with-output-to-file file-name (lambda () (begin (display message) (newline))))))
実行例:
gosh> (load "write-to-file3.scm") #t gosh> (write-to-file "hello3.txt" "Hello, world. This is scheme.") #<undef> gosh> (exit) ^o^ > type hello3.txt Hello, world. This is scheme.