嗨,我正在研究一个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).
Run Code Online (Sandbox Code Playgroud)
当我调用main/0谓词时,我收到一个错误,指出文件意外结束.我的文件看起来像这样:
line1
line2
line3
line4
Run Code Online (Sandbox Code Playgroud)
我在这里也发现了类似的问题以及ASCII和UTF编码的解决方案,但我尝试过,看起来它不是我的解决方案.有人可以帮忙吗?
谓词read/2从文件中读取Prolog术语.那些必须以一段时间结束.尝试将文件内容更新为:
line1.
line2.
line3.
line4.
Run Code Online (Sandbox Code Playgroud)
您可能会在Prolog解析器尝试查找结束时段时意外结束文件.
如果您使用 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), !.
Run Code Online (Sandbox Code Playgroud)
read_line_to_codes/2将每一行直接读取到字符代码数组中。然后atom_chars/2将代码转换为原子。
| 归档时间: |
|
| 查看次数: |
7968 次 |
| 最近记录: |