在SWI-Prolog中,row_arity / 1引发错误,csv_read_file / 3

时间:2018-10-26 00:37:47

标签: csv swi-prolog

我正在尝试将CS​​V文件读取到Prolog知识库中。下面是代码:

:- use_module(library(csv)).

:- my_csv_read('../UserWeightings/userWeighting_dummy_25Oct2018.csv').

my_csv_read(F):-
    csv_read_file(F,Data,[functor(weighting),strip(true)]),
    maplist(assertz,Data).

我的CSV文件只有两列。第1列是URI,第2列是数字(代表该URI的权重)。该文件如下所示:

'http://test/weightings#Red', 0.5
'http://test/weightings#Yellow', 0.3
'http://test/weightings#Green', 0.8
'http://test/weightings#Black', 1.2
'http://test/weightings#White', 2

运行代码时,出现以下错误:

ERROR: m:/{file path and line number}
        Domain error: `row_arity(2)' expected, found `1'
Warning: m:/{path and line number}
        Goal (directive) failed: user:my_csv_read('../UserWeightings/userWeighting_dummy_25Oct2018.csv')

有人知道为什么它只读取一列吗?非常感谢!

2 个答案:

答案 0 :(得分:1)

想通了。问题是因为CSV文件包含两个额外的空行。真傻因此,确保源文件完全正确非常重要。

答案 1 :(得分:0)

在我的情况下-我的第一列为空