在erlang中传输.txt文件中的数据

在erlang中传输.txt文件中的数据,erlang,Erlang,我在二郎工作 现在,我有一个大问题 我想有一个从mnesia表日志,这个日志应该写在excel文件 因此,目标是将数据从表mnesia写入excel文件 我认为,这与本论坛中发现的一些代码有关,最好的方法是编写.txt文件,然后将数据从.txt文件传输到excel文件 我在这个论坛找到了这个代码 exporttxt()-> F=fun(T)->mnesia:foldl(fun(X,Acc)->[X | Acc]end,[],T)end, {atomic,L}=mnesia:transaction

我在二郎工作

现在,我有一个大问题

我想有一个从mnesia表日志,这个日志应该写在excel文件

因此,目标是将数据从表mnesia写入excel文件

我认为,这与本论坛中发现的一些代码有关,最好的方法是编写.txt文件,然后将数据从.txt文件传输到excel文件

我在这个论坛找到了这个代码

exporttxt()->
F=fun(T)->mnesia:foldl(fun(X,Acc)->[X | Acc]end,[],T)end,
{atomic,L}=mnesia:transaction(F(user)),
文件:写入文件(“test.txt”、[io_-lib:format(“~p\t~p\t~p~n”、[F1、F2、F3])|

#用户{id=F1,address=F2,birthday=F3}如注释所示,问题已在中清楚地解释。如果您想要代码,则在这里。但请在直接跳入代码之前理解

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]).
exporttxt()->
F=fun()->mnesia:foldl(fun(X,Acc)->[X | Acc]end,[],user)end,
{atomic,L}=mnesia:transaction(F),
文件:写入文件(“test.txt”、[io_-lib:format(“~p\t~p\t~p~n”、[F1、F2、F3])|

#用户{id=F1,address=F2,birth=F3}在您提到的主题中,我说我没有测试代码,当然还有语法错误。 下面是一段运行的代码

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>
如果你用excel打开它,你会得到

但这不是您应该直接使用的代码序列

  • 第1行应该发生在用于部署应用程序的代码中
  • 第2行是一个记录定义,shell需要它来理解下一行。它应该被模块或包含文件中的-record(…)替换
  • 第3行和第4行应该在一个更高级别的主管的init函数中进行(通过一些测试来检查已经启动的应用程序、现有表…)
  • 第5行应该在服务器的接口定义中
  • 第6、7、8行应该由某个客户端的用户界面生成
  • 以及另一个界面中的最后一行9、10、11(对于管理员?)
向丢失的\u及其同事发送的信息,

如果我可以给你我的意见,你是燃烧的步骤。你应该把重点放在掌握Erlang语法,模式匹配和变量边界的概念…在你应该看看更先进的建设,如列表和二进制理解。花时间看看错误信息,并用它们来解决简单的问题。官方的Erlang文档非常适合这个目的。我总是在我的浏览器中打开它,有时我在查找我不知道的功能时也会使用此链接

接下来是高阶函数、错误处理、进程、并发、OTP…以及高效但不性感的Erlang工具(tv、appmon、debugger…)的使用


我经常推荐它,但是使用神奇的Fred Hebert网站,一步一步地遵循它,重写代码,而不是复制/粘贴;这确实值得努力。

此错误原因的可能重复已在您链接的问题中解释过。第四次使用新帐户询问此问题时
"Pascal"    "Me"    55
"Joe"   "Armstrong" 52
"Georges"   "Boy"   25