我有一个文件如下(数字以空格分隔,行以点结尾):
4554 3332 3 23 344.
4 2 3 5 7 86 56.
7 8 1 4 66.
我想创建一个列表列表,每一行一个列表,如下所示:
[[4554,3332,3,23,344],[4,2,3,5,7,86,56],[7,8,1,4,66]]
我能怎么做?非常感谢您
我有一个文件如下(数字以空格分隔,行以点结尾):
4554 3332 3 23 344.
4 2 3 5 7 86 56.
7 8 1 4 66.
我想创建一个列表列表,每一行一个列表,如下所示:
[[4554,3332,3,23,344],[4,2,3,5,7,86,56],[7,8,1,4,66]]
我能怎么做?非常感谢您
我建议使用明确的子句语法 (DCG) 和 DCG/basics 库,如下所示:
:- use_module(library(dcg/basics)).
:- use_module(library(pio)).
number_line([]) --> ".".
number_line([N|Ns]) --> integer(N), whites, number_line(Ns).
file([Line|Lines]) --> number_line(Line), blanks, file(Lines).
file([]) --> [].
然后,您可以使用如下简单的谓词一次解析整个文件:
parse_integer_file(File, Lists) :-
phrase_from_file(file(Lists), File).
使用您的示例数据进行尝试file.txt
:
?- parse_integer_file('input.txt', R).
R = [[4554, 3332, 3, 23, 344], [4, 2, 3, 5, 7, 86, 56], [7, 8, 1, 4, 66]] .
这种方法有几个优点:
parse_from_file/2
非常高效