从ram文件中读取行

时间:2014-04-02 10:34:24

标签: erlang

我正在尝试从ram文件中读取数据(跳过前面的一些行),但函数ram_file:read_line/1似乎未实现:

Eshell V5.9.2  (abort with ^G)

1> Data = "first line
1> second_line".
"first line\nsecond_line"
2> {ok, File} = file:open(Data, [ram]).
{ok,{file_descriptor,ram_file,#Port<0.504>}}
3> file:read_line(File).
** exception error: undefined function ram_file:read_line/1

我尝试使用指定的其他模式打开文件:rawreadread_ahead,但它会返回{error,badarg}

我知道我可以将数据读入缓冲区并对其进行迭代,但还有另一种方法吗?

2 个答案:

答案 0 :(得分:4)

以下是打开,写入,读取和关闭RAM文件的方法。

main (IOdata) ->
    {ok, Fd} = file:open("bla", [ram,write,read,binary]),
    ok = file:write(Fd, IOdata),
    {ok, Str} = file:pread(Fd, 0, 8192),
    ok = file:close(Fd),
    Str.

您正在寻找的功能是file:pread/3

答案 1 :(得分:0)

ram_file:read_line/1似乎没有在OTP中实现。如果您只处理“ram数据”,或者使用io:get_line/1read_line模块中实施ram_file,我建议使用io:get_line/1