入出力

 cf. 12 入出力 – IO – Elixir

入出力モジュール

標準入出力を使って出力するには IO.puts、入力するには IO.gets を使う。

iex(1)> IO.puts "hello world"
hello world
:ok
iex(2)> IO.gets "yes or no? "
yes or no? yes
"yes\n"

IO.puts の引数に :stderr を渡すと、標準エラー出力に出力する。

iex(3)> IO.puts :stderr, "hello world"
hello world
:ok

ファイルモジュール

File モジュールを使って、ファイルの読み書きができる。

iex(4)> {:ok, file} = File.open "hello", [:write]
{:ok, #PID<0.85.0>}
iex(5)> IO.binwrite file, "world"
:ok
iex(6)> File.close file
:ok
iex(7)> File.read "hello"
{:ok, "world"}

ファイルは、デフォルトではバイナリモードで開かれる。:utf8 を指定することで UTF-8 エンコーディングで開くこともできる。
File モジュールに関数には ! (バンと読む)のついた関数とついていない関数がある。違いはエラーを起こすかどうかだ。

iex(8)> File.read "hello"
{:ok, "world"}
iex(9)> File.read! "hello"
"world"
iex(10)> File.read "unknown"
{:error, :enoent}
iex(11)> File.read! "unknown"
** (File.Error) could not read file "unknown": no such file or directory
    (elixir) lib/file.ex:244: File.read!/1

存在するファイル hello を読み込むときにはどちらも同じだけど、存在しないファイル unknown を読み込もうとしたとき、File.read は単に {:error, :enoent} というタプルを返しているだけなのに対して、File.read! はエラーを発生させている。

パスモジュール

Path モジュールは、パス文字列の操作に使う。

iex(11)> Path.join("foo", "bar")
"foo/bar"
iex(12)> Path.expand("hello")
"c:/Users/takatoh/Documents/w/learning-elixir/GettingStarted/hello"

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください