チャネルを使った入出力

チャネルっていうのは,ファイルディスクリプタみたいなものだと思っておけば良さそう。
入力用には 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