prolog - 如何迭代地使用 read_line_to_codes 和 atom_codes 来生成行数组作为我的 .txt 文件的字符串?
问题描述
我正在尝试使用read_line_to_codes(Stream,Result)
and atom_codes(String,Result)
。这两个谓词首先从文件中读取行作为字符代码数组,然后将该数组转换回字符串。然后我想将所有这些字符串输入到字符串数组中。
我尝试了递归方法,但是对于如何在开始时实际将数组实例化为空以及process_the_stream/2
.
/*The code which doesn't work.. but the idea is obvious.*/
process_the_stream(Stream,end_of_file):-!.
process_the_stream(Stream,ResultArray):-
read_line_to_codes(Stream,CodeLine),
atom_codes(LineAsString,CodeLine),
append_to_end_of_list(LineAsString,ResultArray,TempList),
process_the_stream(Stream,TempList).
我希望使用递归方法将行数组作为字符串。
解决方案
遵循基于 Logtalk 的可移植解决方案,您可以将其与大多数 Prolog 编译器(包括 GNU Prolog)一起使用,或适应您自己的代码:
---- processor.lgt ----
:- object(processor).
:- public(read_file_to_lines/2).
:- uses(reader, [line_to_codes/2]).
read_file_to_lines(File, Lines) :-
open(File, read, Stream),
line_to_codes(Stream, Codes),
read_file_to_lines(Codes, Stream, Lines).
read_file_to_lines(end_of_file, Stream, []) :-
!,
close(Stream).
read_file_to_lines(Codes, Stream, [Line| Lines]) :-
atom_codes(Line, Codes),
line_to_codes(Stream, NextCodes),
read_file_to_lines(NextCodes, Stream, Lines).
:- end_object.
-----------------------
用于测试的示例文件:
------ file.txt -------
abc def ghi
jlk mno pqr
-----------------------
简单测试:
$ gplgt
...
| ?- {library(reader_loader), processor}.
...
| ?- processor::read_file_to_lines('file.txt', Lines).
Lines = ['abc def ghi','jlk mno pqr']
yes
推荐阅读
- ms-access - 删除输入参数值
- javascript - 使用带有 Shopify ajax api 的 jQuery 时出现“意外令牌:”错误
- c# - ODBC 驱动程序忽略 SQL Anywhere 10 的端口参数
- reactjs - Webpack v4,弹出 create-react-app。如何配置自动前缀?
- reactjs - 使用 React、Express 的初始获取获取请求缓慢
- python - 将列表与字典的每个值进行比较(字符串列表)
- com - 注册 Visual Fox Pro 时 DllRegisterServer 失败,错误代码 0x80004005
- python - 如何在 pyglet 中制作 3D?
- python - Py2Neo 没有正确创建日期时间数据类型?
- javascript - 文档事件“onload”总是被触发?