0

私はerlangでescriptを書いていますが、ファイルioで多くの例を見てきましたが、従うのは簡単ではないので、これを見つけました:

Text = file:read_file("f.txt"),
io:format("~n", Text).

何とか動作し、ファイルの内容を出力し、その後に複数のエラーが続きます

in call from erl_eval:do_apply/6 (erl_eval.erl, line 572)
in call from escript:eval_exprs/5 (escript.erl, line 850)
in call from erl_eval:local_func/5 (erl_eval.erl, line 470)
in call from escript:interpret/4 (escript.erl, line 768)
in call from escript:start/1 (escript.erl, line 277)
in call from init:start_it/1 (init.erl, line 1050)
in call from init:start_em/1 (init.erl, line 1030)

では、ファイル全体を読み取り、その内容を後で使用するために配列またはリストに保存する最も簡単な方法は何でしょうか?

4

2 に答える 2

1

まず、file:read_file / 1は、成功すると{ok、Binary}を返します。ここで、Binaryはファイルの内容を表すバイナリです。エラーの場合、{error、Reason}が返されます。したがって、Text変数は実際にはタプルです。簡単な修正(エラーがあるとクラッシュする):

{ok, Text} = file:read_file("f.txt")

次に、io:format/2の最初の引数はフォーマット文字列です。〜nは「改行」を意味する形式ですが、他の意味の形式を指定していないため、引数としてテキストを期待していません。さらに、フォーマット文字列へのすべての引数は、2番目の引数として渡されるリストに含まれている必要があります。〜sは文字列を意味するため、次のようになります。

io:format("~s~n", [Text])

ファイル全体を出力し、その後に改行を続けます。複数の引数を渡したい場合は、次のようになります。

io:format("The number ~B and the string ~s~n", [100, "hello"])

io:format/2には2つの引数しかないことに注意してください。1つは、たまたま複数のエントリを含むリストです。

于 2013-01-21T22:48:20.087 に答える
0

あなたの質問は、ファイルの内容をデータ構造に読み込む簡単な方法を求めていたので、file:consult/1 を楽しむかもしれません。このソリューションでは、consult/1 はファイルが '.' で終わる行で構成されていると想定しているため、ファイルの形式を制御できることを前提としています。{ok, [term()]} | を返します。{エラー、理由}。

したがって、ファイル t.txt が「.」で終了する行で構成されているとします。次のように:

'this is an atom'.
{person, "john", "smith"}.
[1,2,3].

次に、 file:consult/1 を利用できます

1> file:consult("c:\t.txt").
2> {ok,['this is an atom',{person,"john","smith"},[1,2,3]]}
于 2013-01-22T15:23:52.367 に答える