嗨,我正在研究Prolog项目,我需要阅读整个文件。我有一个名为' meno.txt'我需要阅读它。我在堆栈上找到了一些代码。代码如下:
main :-
open('meno.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).
当我调用main/0
谓词时,出现意外结束文件的错误。我的文件看起来像这样:
line1
line2
line3
line4
我在这里也发现了类似的问题以及ASCII和UTF编码的解决方案,但我尝试过,看起来它不是我的解决方案。有人可以帮忙吗?
答案 0 :(得分:5)
谓词read/2
从文件中读取Prolog术语。那些必须以一段时间结束。尝试将文件内容更新为:
line1.
line2.
line3.
line4.
您可能会在Prolog解析器尝试查找结束时间段时意外结束文件。
答案 1 :(得分:3)
如果您使用的是SWI Prolog,您可以使用类似的内容进行阅读:
read_file(Stream,[X|L]) :-
\+ at_end_of_stream(Stream),
read_line_to_codes(Stream,Codes),
atom_chars(X, Codes),
read_file(Stream,L), !.
read_line_to_codes/2
将每一行直接读入字符代码数组。然后atom_chars/2
会将代码转换为原子。