首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >打印Mnesia表的最佳方法

打印Mnesia表的最佳方法
EN

Stack Overflow用户
提问于 2011-10-14 14:14:41
回答 3查看 11.4K关注 0票数 10

我尝试了下面的代码片段:

代码语言:javascript
运行
复制
print_next(Current) ->
    case mnesia:dirty_next(muppet, Current) of
        '$end_of_table' ->
            io:format("~n", []),
            ok;
        Next ->
            [Muppet] = mnesia:dirty_read({muppet, Next}),
            io:format("~p~n", [Muppet]),
            print_next(Next),
            ok
    end.

print() ->
    case mnesia:dirty_first(muppet) of
        '$end_of_table' ->
            ok;
        First ->
            [Muppet] = mnesia:dirty_read({muppet, First}),
            io:format("~p~n", [Muppet]),
            print_next(First),
            ok
    end.

但是它太长了。我也可以使用dirty_all_keys,然后遍历key list,但我想知道是否有更好的方法来打印Mnesia表内容。

EN

回答 3

Stack Overflow用户

发布于 2011-10-14 21:04:13

如果您只是想要一种快速而粗糙的方式来打印shell中的Mnesia表的内容,并且如果您的表不是disc_only_copies类型,那么您可以利用Mnesia表将其数据存储在ETS表中这一事实并运行:

代码语言:javascript
运行
复制
ets:tab2list(my_table).

或者,如果您认为shell截断数据太多:

代码语言:javascript
运行
复制
rp(ets:tab2list(my_table)).

当然,对于“真正的”代码,不推荐这样做。

票数 14
EN

Stack Overflow用户

发布于 2014-10-05 23:05:57

要简单快速地查看表内容,您可以使用mnesia的select函数,并使用catch-all Match Specification,如下所示:

代码语言:javascript
运行
复制
CatchAll = [{'_',[],['$_']}].
mnesia:dirty_select(TableName, CatchAll).

您还可以在事务上下文中运行它:

代码语言:javascript
运行
复制
CatchAll = [{'_',[],['$_']}].
SelectFun = fun() -> mnesia:select(TableName, CatchAll) end.
mnesia:transaction(SelectFun).

但是,如果您处于具有大数据的生产环境中,则要小心。

票数 9
EN

Stack Overflow用户

发布于 2013-10-18 20:07:09

正如Muzaaya所说,你可以使用tv (表格可视化工具)来查看记忆和ets表格。或者,您可以使用以下代码在终端上或在您想要将结果存储在文件中的情况下获取mnesia表数据- Print:

代码语言:javascript
运行
复制
select_all() -> 
   mnesia:transaction( 
fun() ->
    P=qlc:e(qlc:q([E || E <- mnesia:table(tableName)])),      %query to select all data from table named 'tableName'                                                                                    
    io:format(" ~p ~n ", [P]), % Prints table data on terminal
    to_file("fileName.txt",P) % to_file method writes the data to file
end ).


to_file(File, L) ->
  mnesia:transaction( 
fun() ->
      {ok, S} = file:open(File, write),
      lists:foreach(fun(X) -> io:format(S, "~p.~n" ,[X]) end, L),
      file:close(S)
  end).
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7763745

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档