从swi-prolog代码将数据写入CSV文件

时间:2014-12-05 16:50:35

标签: csv prolog swi-prolog

如何从下面的prolog代码将数据写入CSV文件?

谢谢,

SB

run:-
   member(A,[a,b,c,d,e]),
   member(B,[1,2,3,4,5,6]),
   write(A),write(' '),write(B),nl,
   fail.
run.

1 个答案:

答案 0 :(得分:2)

简单解决方案

由于您使用的是SWI-Prolog,因此可以使用CSV library

?- use_module(library(csv)).
?- findall(row(A,B), (member(A, [a,b,c,d,e]), member(B, [1,2,3,4,5])), Rows), csv_write_file('output.csv', Rows).

如您所见,我分两步完成:

  1. 我创建了row(A, B)形式的术语。
  2. 然后我将这些术语交给csv_write_file/2,它负责创建一个语法正确的输出文件。
  3. 非标准分隔符

    在你的问题中,你不是在AB之间写一个逗号,而是写一个空格。如果确实想要将空格用作分隔符,则可以将其设置为选项:

    csv_write_file('output.csv', Rows, [option(separator(0' )])
    

    '不平衡'参数

    此外,在您的问题中,B的价值高于A的价值。您可以编写处理此问题的代码,但有几种方法可以解决这个问题。例如,(1)您可以使用nill填充缺失的单元格; (2)如果same_length(As, Bs)失败,你可以抛出异常; (3)你只能写完整的'行:

    length(As0, N1),
    length(Bs0, N2),
    N is max(N1, N2),
    length(As, N),
    append(As, _, As0),
    length(Bs, N),
    append(Bs, _, Bs0),