小编Udo*_*ike的帖子

如何将 csv 文件读入 SWI prolog 中的列表列表,其中内部列表代表 CSV 的每一行?

我有一个类似于下面的 CSV 文件:即不是 Prolog 格式

james,facebook,intel,samsung
rebecca,intel,samsung,facebook
Ian,samsung,facebook,intel
Run Code Online (Sandbox Code Playgroud)

我正在尝试编写一个 Prolog 谓词来读取文件并返回一个看起来像的列表

[[james,facebook,intel,samsung],[rebecca,intel,samsung,facebook],[Ian,samsung,facebook,intel]]
Run Code Online (Sandbox Code Playgroud)

在其他谓词中进一步使用。

我仍然是一个初学者,并从 SO 中找到了一些很好的信息并对其进行了修改以查看我是否可以得到它,但我被卡住了,因为我只生成了一个看起来像这样的列表

[[(james,facebook,intel,samsung)],[(rebecca,intel,samsung,facebook)],[(Ian,samsung,facebook,intel)]]
Run Code Online (Sandbox Code Playgroud)

这意味着当我调用内部列表的头部时,我得到(james,facebook,intel,samsung)而不是james.

这是正在使用的代码:-(在 SO 上看到并已修改)

stream_representations(Input,Lines) :-
    read_line_to_codes(Input,Line),
    (   Line == end_of_file 
    ->  Lines = []
    ;   atom_codes(FinalLine, Line), 
        term_to_atom(LineTerm,FinalLine), 
        Lines = [[LineTerm] | FurtherLines],
        stream_representations(Input,FurtherLines) 
    ).
Run Code Online (Sandbox Code Playgroud)
main(Lines) :- 
    open('file.txt', read, Input), 
    stream_representations(Input, Lines), 
    close(Input).
Run Code Online (Sandbox Code Playgroud)

csv io prolog swi-prolog dcg

6
推荐指数
1
解决办法
268
查看次数

标签 统计

csv ×1

dcg ×1

io ×1

prolog ×1

swi-prolog ×1