-5

テーブルmnesiaからDATAを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
4

2 に答える 2

2
mnesia:transaction(F(user))

それは間違っています。少し時間を取って、それを見てください。mnesia:transaction/1 関数を期待します。関数に渡すのではなく、F(user) の結果が何であれ渡します.. (erlang は厳密な評価を使用するため、mnesia:transaction/ の前にF(user) を評価することを思い出してください。 1)。

あなたの場合、 F(user) への呼び出しは、トランザクション内で実行されることが予想されていたため失敗しました。

于 2013-03-12T01:51:48.983 に答える
1

Erlang 版の問題ではありません。それは、ステートメント mensia:foldlのスペルが間違っているという問題です。そのはず mnesia:foldl

于 2013-03-11T18:14:15.560 に答える