我想读取一个纯文本文件并对每行应用一个谓词(谓词包含执行输出的write
)。我会怎么做?在Prolog中逐行读取文件
14
A
回答
13
在SWI-Prolog中,最简洁的解决方案是编写一个描述“行”的DCG,然后调用每行的谓词。使用库(pio)将DCG应用于文件。
编辑:按照要求,考虑:
:- use_module(library(pio)).
lines([]) --> call(eos), !.
lines([Line|Lines]) --> line(Line), lines(Lines).
eos([], []).
line([]) --> ("\n" ; call(eos)), !.
line([L|Ls]) --> [L], line(Ls).
使用范例:?- phrase_from_file(lines(Ls), 'your_file.txt').
14
您可以使用read
读取流。请记住调用at_end_of_stream
以确保没有语法错误。
实施例:
readFile.pl
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).
MYFILE.TXT
'line 0'.
'line 1'.
'line 2'.
'line 3'.
'line 4'.
'line 5'.
'line 6'.
'line 7'.
'line 8'.
'line 9'.
因此通过调用main
您将收到的输出:
?- main.
[line 0,line 1,line 2,line 3,line 4,line 5,line 6,line 7,line 8,line 9]
true
只需配置main
。当然,这里的输出是一个使用write
的例子。配置以匹配您的请求。
我假设这个原理可以用来回答你的问题。祝你好运。
相关问题
- 1. 在PHP中逐行读取大文件
- 2. 在PowerShell中逐行读取文件
- 3. 在Rust中逐行读取大文件
- 4. 在matlab中逐行读取文件
- 5. 在飞镖中逐行读取文件
- 6. 在Java中逐行读取docx文件
- 7. 在ksh中逐行读取文件
- 8. 在c中逐行读取文件#
- 9. 逐行读取文件
- 10. 逐行读取文件
- 11. 逐行读取.json文件
- 12. C++逐行读取文件
- 13. 逐行读取文件
- 14. 逐行读取csv文件
- 15. 逐行读取文件,逐字符C
- 16. 文件的读写,而逐行读取文件中的行
- 17. 从文件中逐行读取
- 18. 从C文件中逐行读取
- 19. 从java文件中逐行读取
- 20. 从一个文件中逐行读取
- 21. 从文件中逐行读取整数
- 22. 从txt文件中逐行读取并逐行分割
- 23. 从文件中逐行逐行读取C
- 24. 从文件行逐行读取
- 25. 逐行读取文件和标记行
- 26. 逐行向后读取文件行
- 27. 如何逐行读取文本文件?
- 28. 如何逐行读取文本文件?
- 29. 用jQuery逐行读取文本文件
- 30. 从文本文件逐行读取C++
我知道这已经很长时间了,但我正在尝试这种方法,它似乎花了很长时间。您能否提供一些使用DCG和库(pio)的高性能代码的示例,这些代码将通过行读取文件?谢谢! – 2014-10-22 03:21:34