【发布时间】:2020-04-04 00:04:14
【问题描述】:
我想从文件中读取,然后以列表的形式存储。每有一个逗号,它将逗号前的所有字符组合成一个新词。一个新行将表明它是一个新的子列表。这与 java 在读取文件时可以执行的操作非常相似。我正在学习序言并且在读取文件并将它们作为输入以执行不同的操作时遇到问题。您知道任何可以帮助我读取文件并将这些数据用作不同功能的输入的方法吗?谢谢。
读取文件:
泰尔斯、奥利维亚、杰克逊、索菲亚
加拿大邮政,索菲亚,杰克逊,奥利维亚
思科、奥利维亚、索菲亚、杰克逊
代码:
read_from_file(File, A):-
open(File, read, Stream),
get_char(Stream, Char1),
process_the_stream(Char1, Stream, A),
close(Stream).
write_on_file(File,Text):-
open(File, append, Stream),
write(Stream, Text), nl,
close(Stream).
process_the_stream(end_of_file, _, []):- !.
process_the_stream(Char, Stream, [Char|B]):-
write(Char),
get_char(Stream, Char2),
process_the_stream(Char2, Stream, B).
当前输出:
A = ['T',h,a,l,e,s,',','O',l,i,v,i,a,',','J',a,c, k,s,o,n,',','S',o,p,h,i,a,'\n','C',a,n,a,d,a,' ','P ',o,s,t,',','S',o,p,h,i,a,',','J',a,c,k,s,o,n,',', 'O',l,i,v,i,a,'\n','C',i,s,c,o,',','O',l,i,v,i,a,' ,','S',o,p,h,i,a,',','J',a,c,k,s,o,n]
愿望输出:
A = [[Thales,Olivia,Jackson,Sophia],[加拿大邮政,Sophia,Jackson,Olivia],[Cisco,Olivia,Sophia,Jackson]]
【问题讨论】:
-
如果您使用 SWI-Prolog,请考虑 read_string/5
-
它是我必须像 prolog 库那样导入的东西吗?我在导入库时遇到问题,花了几个小时研究如何导入库,但对我来说不起作用。
-
您在使用 SWI-Prolog 吗?那是我唯一使用的一个。如果有,是什么版本?
-
哦,我正在使用不同的 prolog 版本,刚刚安装了 swi,现在我可以使用该库了。谢谢。
-
@GuyCoder 我导入了库(csv),我读取了文件并得到了这个输出:?- csv_read_file("coop_e_3x3.csv", Rows)。 Rows = [row('Thales', 'Olivia', 'Jackson', 'Sophia'), row('Canada Post', 'Sophia', 'Jackson', 'Olivia'), row('Cisco', 'Olivia' ','索菲亚','杰克逊')]。您知道如何访问列表吗?我试图抓住头,它返回给我:A = row('Thales', 'Olivia', 'Jackson', 'Sophia')。我试图重新振作起来,希望它能给我泰利斯,但它返回的都是假的。与tail相同,当我得到A的尾巴时它返回false。