【问题标题】:Erlang benchmarker has problems reading filesErlang benchmarker 在读取文件时出现问题
【发布时间】:2016-07-02 05:52:21
【问题描述】:

这个问题与the previous one 有关。 我正在运行从the official repo of the book 克隆的代码 当我跑 benchmarker:start(slidingwindow5).,我收到以下错误:

4> benchmarker:start(slidingwindow50)。真实尺寸:4, 可塑性:无 尺寸:4,可塑性:无 尺寸:4, 可塑性:无 尺寸:4,可塑性:无 尺寸:4, 可塑性:无 尺寸:4,可塑性:无 尺寸:4, 可塑性:无 尺寸:4,可塑性:无 尺寸:4, 可塑性:无尺寸:4,可塑性:无

Specie_Id:6.858114617542796e-10 形态学:forex_trader

******** 人口监测器以参数启动:{state,benchmark,test,[], [],未定义,未定义, 未定义,[],0,0,0,0,0, 未定义,未定义, 未定义,未定义, 未定义,未定义,0.5, 10,10,mathema,inf,10000, inf,,false} 初始总评估:0

开始 开始 开始 开始 开始 开始 开始

5> =错误报告==== 2016 年 3 月 16 日::14:11:34 === 进程 出错,退出值: {badarg,[{ets,last,['EURUSD15'],[]},{fx,init_state,5,[{file,"fx.erl"},{line,375}]},{fx,sim, 3,[{file,"fx.erl"},{line,284}]}]}

=错误报告==== 2016 年 3 月 16 日::14:11:34 === 进程 出错,退出值: {badarg,[{ets,last,['EURUSD15'],[]},{fx,init_state,5,[{file,"fx.erl"},{line,375}]},{fx,sim, 3,[{file,"fx.erl"},{line,284}]}]}开始开始开始

据了解,基准测试人员无法找到和使用表格。为什么会发生这种情况,我该如何解决?

更新:重命名EURUSD15会导致运行polis:start().时出错:

Mnesia(nonode@nohost):数据可能丢失。

badarg 错误仍然发生并被报告。

更新:深入研究源代码,尤其是fx.erl,让我相信由于某种原因,名为EURUSD15 的.txt 文件没有从磁盘正确读取,所以它是没有转换成表格,不能被 ets 和其他代码使用。

fx.erl中的文件读取有什么问题,如何纠正?

【问题讨论】:

    标签: erlang erlang-shell


    【解决方案1】:

    ets:last 期望表名作为唯一参数。但是,在您的代码中,它被称为“EURUSD15”。这是表名吗?表是否已创建?请记住,当创建表时,创建表的进程拥有它。如果该进程终止,则该表将被删除。您需要根据错误中的调用堆栈调试代码:

    function fx:init_state/5 in file "fx.erl" line 375
    called from
    function fx:sim/3 in file "fx.erl" line 284
    

    【讨论】:

    • 是的,我知道问题出在桌子上。有一个名为fx_tables 的文件夹,其中包含EURUSD、EURUSD.csv、EURUSD.txt 等文件。据我了解,该表在进程启动之前就存在,并且在它终止时不会被删除。
    • 看编辑搞清楚整个项目的文件夹结构。
    • 表要么是代表表名的原子,要么是表id,见:erlang.org/doc/man/ets.html#type-tab 该表必须先用ets:new/2创建,然后才能用ets:last访问,见: erlang.org/doc/man/ets.html#new-2 该表不在文件中,而是在内存中,所以我不确定您所说的“fx_tables”文件夹是什么意思。在 Erlang shell 中运行ets:i().,它将打印出在 ETS 中创建的所有表。您的表“EURUSD15”必须在该列表中。
    • 我认为它是这样的:我在 erlang shell 中运行代码,来自fx_tables 的文件(比如说 .csv 文件)被读取并转换为表 erlang 和 ets 特别可以采用。看来我一直在想什么不对的。 ets:i(). 显示了很多表格(包括 experiment 表格,这很重要),但没有一个名为 EURUSD 或任何类似的东西。另外,我怀疑我们应该去和这么长的cmets聊天。
    • 尝试从磁盘读取表的代码可能无法正常工作或未运行,因此数据尚未从 .csv 文件复制到 ETS。也许你的章节中的例子是建立在前几章的一些代码之上的,而作者假设表格已经被加载了?
    猜你喜欢
    • 2018-12-03
    • 1970-01-01
    • 1970-01-01
    • 2016-03-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多