Erlang Language
ファイルI / O
サーチ…
ファイルからの読み込み
次のデータを含むlyrics.txtファイルがあると仮定しましょう:
summer has come and passed
the innocent can never last
wake me up when september ends
一度にファイル全体を読む
file:read_file(File)
を使用すると、ファイル全体を読むことができます。それは原子操作です:
1> file:read_file("lyrics.txt").
{ok,<<"summer has come and passed\r\nthe innocent can never last\r\nWake me up w
hen september ends\r\n">>}
一度に1行を読む
io:get_line
は改行またはファイルの終わりまでテキストを読み込みます。
1> {ok, S} = file:open("lyrics.txt", read).
{ok,<0.57.0>}
2> io:get_line(S, '').
"summer has come and passed\n"
3> io:get_line(S, '').
"the innocent can never last\n"
4> io:get_line(S, '').
"wake me up when september ends\n"
5> io:get_line(S, '').
eof
6> file:close(S).
ok
ランダムアクセスで読む
file:pread(IoDevice, Start, Len)
、 IoDevice
からLen
と同じくらいStart
からIoDevice
ます。
1> {ok, S} = file:open("lyrics.txt", read).
{ok,<0.57.0>}
2> file:pread(S, 0, 6).
{ok,"summer"}
3> file:pread(S, 7, 3).
{ok,"has"}
ファイルへの書き込み
一度に1行書く
write
モードでファイルを開き、 io:format/2
:
1> {ok, S} = file:open("fruit_count.txt", [write]).
{ok,<0.57.0>}
2> io:format(S, "~s~n", ["Mango 5"]).
ok
3> io:format(S, "~s~n", ["Olive 12"]).
ok
4> io:format(S, "~s~n", ["Watermelon 3"]).
ok
5>
結果は、 fruit_count.txtという名前のファイルで、次の内容となります。
Mango 5
Olive 12
Watermelon 3
ファイルを書き込みモードで開くと、ファイルシステムにまだ存在していない場合は作成されます。
また、 file:open/2
write
オプションを使用すると、(ファイルに何も書き込まなくても)ファイルが切り詰められます。これを防ぐには、 [read,write]
または[append]
モードでファイルを開きます。
一度にファイル全体を書き込む
file:write_file(Filename, IO)
は、一度にファイルを書き込むための最も簡単な関数です。ファイルがすでに存在する場合は上書きされ、それ以外の場合は作成されます。
1> file:write_file("fruit_count.txt", ["Mango 5\nOlive 12\nWatermelon 3\n"
]).
ok
2> file:read_file("fruit_count.txt").
{ok,<<"Mango 5\nOlive 12\nWatermelon 3\n">>}
3>
ランダムアクセスで書き込み
ランダムアクセス書き込みの場合、 file:pwrite(IoDevice, Location, Bytes)
が使用されます。ファイル内の文字列を置き換える場合は、このメソッドが便利です。
上記で作成したファイルで "Olive 12"を "Apple 15"に変更したいとします。
1> {ok, S} = file:open("fruit_count.txt", [read, write]).
{ok,{file_descriptor,prim_file,{#Port<0.412>,676}}}
2> file:pwrite(S, 8, ["Apple 15\n"]).
ok
3> file:read_file("fruit_count.txt").
{ok,<<"Mango 5\nApple 15\nWatermelon 3">>}
4> file:close(S).
ok
5>
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow