如何从下面的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.
答案 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).
如您所见,我分两步完成:
row(A, B)
形式的术语。csv_write_file/2
,它负责创建一个语法正确的输出文件。在你的问题中,你不是在A
和B
之间写一个逗号,而是写一个空格。如果确实想要将空格用作分隔符,则可以将其设置为选项:
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),