昨日はファイルからの入力を覚えたので、今日はファイルへの出力。
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.