我在erlang工作
现在,我有一个大问题
我想从表mnesia获取日志,此日志应该写在excel文件
中所以目标是将表mnesia中的数据写入excel文件
我认为这与本论坛中的一些代码相关,最好的方法是编写.txt文件,然后将数据从.txt文件传输到excel文件
我在此论坛中找到此代码link。
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]).
但是这段代码会产生错误
答案 0 :(得分:0)
如评论所述,link本身清楚地解释了这个问题。如果你想要代码那么它就在这里。但在直接跳到代码之前请先了解。
exporttxt()->
F = fun() -> mnesia:foldl(fun(X,Acc) -> [X|Acc] end, [],user) 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]).
答案 1 :(得分:0)
在你提到的主题中,我说我没有测试代码,当然还有语法错误。 这是一个运行的代码。
1> ok = mnesia:create_schema([node()]).
ok
2> rd(my_user,{firstname,lastname,age}).
my_user
3> ok =application:start(mnesia).
ok
4> {atomic,ok} = mnesia:create_table(my_user,[{attributes,record_info(fields,my_user)},{disc_copies,[node()]},{type,bag}]).
{atomic,ok}
5> Add_user = fun(Fn,Ln,Ag) ->
5> F = fun() -> mnesia:write(my_user,#my_user{firstname=Fn,lastname=Ln,age=Ag},write) end,
5> mnesia:activity(transaction,F)
5> end.
#Fun<erl_eval.18.82930912>
6> ok = Add_user("Georges","Boy",25).
ok
7> ok = Add_user("Joe","Armstrong",52).
ok
8> ok = Add_user("Pascal","Me",55).
ok
9> F = fun(T) -> mnesia:foldl(fun(X,Acc) -> [X|Acc] end, [],T) end.
#Fun<erl_eval.6.82930912>
10> {atomic,L} = mnesia:transaction(F,[my_user]).
{atomic,[#my_user{firstname = "Pascal",lastname = "Me",
age = 55},
#my_user{firstname = "Joe",lastname = "Armstrong",age = 52},
#my_user{firstname = "Georges",lastname = "Boy",age = 25}]}
11> ok = file:write_file("test.txt",[io_lib:format("~p\t~p\t~p~n",[F1,F2,F3]) || #my_user{firstname = F1, lastname = F2, age = F3} <- L]).
ok
12>
您的工作目录中将包含一个名为test.txt的文件,其中包含
"Pascal" "Me" 55
"Joe" "Armstrong" 52
"Georges" "Boy" 25
如果你用excel打开它,你会得到
但这不是你应该直接使用的代码序列。
向Lost_with_coding及其同事发送消息,
如果我可以给你我的意见,那你就是在加油。您应该专注于掌握Erlang语法,模式匹配和变量边界的概念......之后您应该看一下更高级的构造,例如list和binary comprehensions。花点时间查看错误消息并使用它们来解决简单的问题。官方的Erlang文档非常适用于此目的。我总是在浏览器中打开它,有时候当我查找我不知道的功能时,我也会使用这个链接http://erldocs.com/R15B/。
接下来会出现更高阶函数,错误处理,进程,并发性,OTP ......以及使用高效但不性感的Erlang工具(tv,appmon,debugger ......)。
我经常推荐它,但请使用梦幻般的弗雷德赫伯特的网站http://learnyousomeerlang.com/并一步一步地按照它,重写代码,而不是复制/粘贴;它确实值得付出努力。