チャネルっていうのは,ファイルディスクリプタみたいなものだと思っておけば良さそう。
入力用には open_in と close_in を使う。
こういうファイル members.txt があったとして:
^o^ >type members.txt andy bill charlie
ファイルから入力する例。
# let infile = open_in "C:/home/takatoh/members.txt";; val infile : in_channel = <abstr> # input_line infile;; - : string = "andy" # input_line infile;; - : string = "bill" # input_char infile;; - : char = 'c' # input_byte infile;; - : int = 104
ファイルの最後に到達すると End_of_file 例外が発生する。
# input_line infile;; - : string = "arlie" # input_line infile;; Exception: End_of_file. # close_in infile;; - : unit = ()
一方,ファイルに出力するには open_out と close_out。
# let outfile = open_out "C:/home/takatoh/foo.txt";; val outfile : out_channel = <abstr> # output_string outfile "Hello, world.";; - : unit = () # output_char outfile '\n';; - : unit = () # close_out outfile;; - : unit = ()
できたファイル:
^o^ >type foo.txt Hello, world.
まとめ
入力 | 出力 | |
オープン | open_in | open_out |
クローズ | close_in | close_out |
1行ずつ | input_line | output_string |
1文字ずつ | input_char | output_char |
1バイトずつ | input_byte | output_byte |