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