我正在尝试从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
我尝试使用指定的其他模式打开文件:raw
,read
和read_ahead
,但它会返回{error,badarg}
我知道我可以将数据读入缓冲区并对其进行迭代,但还有另一种方法吗?
答案 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/1
在read_line
模块中实施ram_file
,我建议使用io:get_line/1
。