我想将DATA fom table mnesia导出到txt文件
我尝试使用此代码:
exporttxt()->
F = fun(T) -> mensia:foldl(fun(X,Acc) -> [X|Acc] end, [],T) end,
{atomic,L} = mnesia:transaction(F(user)),
file:write_file("test.txt",[io_lib:format("~p\t~p\t~p~n",[F1,F2,F3]) ||
#user{id = F1,adress = F2,birthday = F3} <- L]).
但是当我测试这个函数时,我有这个错误:
Erlang R13B03 (erts-5.7.4) [source] [rq:1] [async-threads:0] [hipe] [kernel-poll:false]
Eshell V5.7.4 (abort with ^G)
1> model:exporttxt().
** exception error: undefined function mensia:foldl/3
in function model:exporttxt/0
2>
如您所见,我使用的是erlang版本13
我现在尝试使用此代码:
exporttxt()->
F = fun(T) -> mnesia:foldl(fun(X,Acc) -> [X|Acc] end, [],T) end,
{atomic,L} = mnesia:transaction(F(user)),
file:write_file("test.txt",[io_lib:format("~p\t~p\t~p~n",[F1,F2,F3]) ||
#user{id = F1,adress = F2,birthday = F3} <- L]).
但我有这个错误:
** exception exit: {aborted,no_transaction}
in function mnesia:abort/1
in call from model:exporttxt/0
我也尝试:
exporttxt()->
F = fun(T) -> mnesia:foldl(fun(X,Acc) -> [X|Acc] end, [],T) end,
{atomic,L} = mnesia:transaction(F),
file:write_file("test.txt",[io_lib:format("~p\t~p\t~p~n",[F1,F2,F3]) ||
#user{id = F1,adress = F2,birthday = F3} <- L]).
但我有这个错误:
** exception error: no match of right hand side value
{aborted,{{badarity,{#Fun<model.208.16694406>,[]}},
[{mnesia_tm,apply_fun,3},
{mnesia_tm,execute_transaction,5},
{model,exporttxt,0},
{erl_eval,do_apply,5},
{shell,exprs,6},
{shell,eval_exprs,6},
{shell,eval_loop,3}]}}
in function model:exporttxt/0
答案 0 :(得分:2)
mnesia:transaction(F(user))
这是错误的,花一点时间看看它。 mnesia:transaction / 1期望一个函数,你没有传递给它一个函数,你传递F(用户)的结果是...(记得erlang使用严格的评估,所以它评估F(用户)之前 mnesia:transaction / 1)。
在您的情况下,对F(用户)的调用失败,因为它应该在事务内运行。
答案 1 :(得分:1)
这不是Erlang版本的问题。语句mensia:foldl
拼写错误是问题所在。它应该是
mnesia:foldl