读取常见的lisp文件

时间:2013-11-10 13:28:43

标签: common-lisp lispworks

我是普通lisp的新手,我想做一些(可能是高级文件阅读)

所以假设我有example1.txt,example2.txt和example3.txt。

example1.txt包含以下内容:

  

1940年10月9日出生

     

1980年12月8日逝世(40岁)

     

John Winston Ono Lennon,MBE(出生于John Winston Lennon; 1940年10月9日    - 1980年12月8日)是一位英国音乐家,歌手和词曲作者   作为甲壳虫乐队的创始成员,它在世界范围内声名鹊起

所以我想做的是:

我被提示输入名字,我输入了Lennon。

如果文件包含单词lennon,继续阅读,否则读取example2,我不知道如何在LISP中使用缓冲区,在C ++或perl中,这对我来说很容易,也不会有问题这个问题,但我必须在口齿不清。我想要返回元素的索引,例如,如果我键入“musician”,我希望它继续阅读,而不是从0开始。

根据this book我可能需要一个名为READ-SEQUENCE的函数是真的吗?以及如何使用它?顺便说一句,我在Windows上并使用LispWorks。

1 个答案:

答案 0 :(得分:2)

(defun find-word-in-file (word file)
  (with-open-file (stream file)
    (loop
       :for line := (read-line stream nil nil)
       :for found := (and line (search word line))
       :until (or (not line) found)
       :summing (length line) :into position
       :finally (return (when found (+ position found))))))

(find-word-in-file "Lennon" "./example.txt")

;; 79

我猜这样的事情会发生。