使用以下代码阅读文件,但此代码仅读取有'。'的行。在文件的末尾,还有另一种方法来读取任何类型的文件并存储在列表中吗?
main :-
open('myFile.txt', read, Str),
read_file(Str,Lines),
close(Str),
write(Lines), nl.
read_file(Stream,[]) :-
at_end_of_stream(Stream).
read_file(Stream,[X|L]) :-
\+ at_end_of_stream(Stream),
read(Stream,X),
read_file(Stream,L).
我从这个链接中获取了这段代码 Read a file line by line in Prolog
答案 0 :(得分:2)
请注意,由于以下原因,您编写的代码本质上是不正确的。
1mo,您正在阅读Prolog数据,而不是行。取a. b. c.
列表[a,b,c]
。
2do,对at_end_of_stream/1
的测试非常棘手,并且在阅读Prolog数据时无法按预期工作。拿3行文件:
first_fact.
second_fact.
% no comment - oh that's a comment nevertheless
这将为您提供列表[first_fact, second_fact, end_of_file]
。在阅读完最后一行后,read/1
会为您提供一个字词end_of_file
。
3tio,在回溯时,main
将始终产生错误!
?- main.
[first_fact,second_fact,end_of_file]
true ;
ERROR: at_end_of_stream/1: stream `<stream>(0x1c38330)' does not exist
如果您只想读取字节,请使用library(pio)
。要使用它,首先要学习dcg形式主义。
对于文件中每次出现magic
,以下内容将成功:
?- phrase_from_file((..., "magic", ...), filename).
使用... //0
的以下定义:
... --> [] | [_], ... .
请参阅this for more。