我有一个纯文本文件和一些随机的数据行,没有什么特别的..我想知道我将如何逐行读取这个文件作为以下伪代码:
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有太多了解吗?关于具体含义的更多细节以及使用它们的示例不仅仅是对它的描述
答案 0 :(得分: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).
答案 1 :(得分:0)
您可以定义以下谓词来读取从文件到列表的行,停在除“停止”之外的任何行:
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(_, []).
文件是一个流对象,为了得到它你可以使用:
open(FileName, read, File).
通过阅读一行来略读一行。研究包含read_line_to_codes
,atom_codes
和open
的手册中的部分,它们有很多有用的谓词。同样,您需要了解Prolog的基础知识。
现在这是一种方法,另一种方法是使用DCG。这将是一种适当的“Prolog”方式。在stackoverflow上有很多使用DCG的例子。
如果你问自己为什么这么难做到这一点,那是因为Prolog并不是要用作简单文本处理的工具;有更好的工具(grep,sed,awk,当然还有perl)。
P.S。 Stackoverflow实际上是Prolog中代码示例的重要来源。用SWI-Prolog标记的问题将为您提供SWI-Prolog特定代码的示例。