0

我有一个纯文本文件和几行随机数据,没有什么特别的。我想知道我将如何像下面的伪代码那样逐行读取这个文件:

arrLines[]
data = open ("x.txt", read, handle)
for line in data
   if line == "stop" then stop reading
   arrLines.add(line)

close(handle)

但我想跳过文件中的第一行。我知道的其他语言中非常简单的东西,例如 python..ect,我发现从文档中学习非常困难,因为他们似乎希望您在使用它之前已经了解很多 prolog:/

任何人都可以推荐一些他们不希望您在使用 prolog 之前了解很多的资源吗?关于事物含义的更多细节以及使用它们的示例,而不仅仅是对事物的描述

4

2 回答 2

1

您可以定义以下谓词来从文件中读取行到列表中,并在仅包含“stop”的行处停止:

read_until_stop(File, [L|Lines]) :-
    read_line_to_codes(File, Codes), Codes \= end_of_file,
    atom_codes(L, Codes),
    L \= stop,
    !, read_until_stop(File, Lines).
read_until_stop(_, []).

File是一个流对象,要获取它,您可以使用:

open(FileName, read, File).

通过阅读一行来跳过一行。研究手册中包含read_line_to_codesatom_codes和的部分open,它们有很多有用的谓词。同样,您需要了解 Prolog 基础知识。

现在这是一种方法,另一种方法是使用 DCG。这将是一种正确的“Prolog”方式。在 stackoverflow 上有很多使用 DCG 的例子。

如果你问自己为什么这样做这么难,那是因为 Prolog 并不是用来做简单文本处理的工具;有些工具在这方面做得更好(grep、sed、awk,当然还有 perl)。

PS Stackoverflow 实际上是 Prolog 中代码示例的重要来源。用 SWI-Prolog 标记的问题将为您提供 SWI-Prolog 特定代码的示例。

于 2013-04-01T08:16:51.570 回答
0

让我也用 prolog 的伪代码来制定答案

open the file and
find all lines which contain the string

a line is all characters until newline

我找到了一个教程:https ://www.csupomona.edu/~jrfisher/www/prolog_tutorial/1.html

我建议使用apropos(append)搜索附加或打开等。它将以可用的结构打开帮助。

查看 swi prolog 评估某事使用时发生了什么gtrace

?- gtrace, append([1,2,3], [9], L).
于 2013-03-31T21:20:22.330 回答