Kent M. Pitman wrote:
... What i want to do is start at the beginning of the
file( which I can do) and search for the word "entity".
Once I find this, I want to assign the next word to a
variable. ...
Use WITH-OPEN-FILE to open the stream. It will let you specify
a variable to which the stream is bound. The I/O routines all
take a stream as argument. e.g.,
(defun find-word-association-in-file (word file)
(with-open-file (stream file :direction :input)
(loop
(let ((line (read-line stream nil nil)))
(declare (type string line))
(unless line (return nil))
(let ((pos1 (position #\Space line :test #'char-equal)))
(when (and pos1 (string-equal word line :end2 pos1))
(let ((pos2 (position #\Space line
:test (complement #'char-equal)
:start pos1)))
(when pos2
(return (subseq line pos2
(position #\Space line
:test #'char-equal
:start pos2)))))))))))
Given a data file "delete-me.text" containing:
FOO OOF
BAR RAB XYZZY
BAZ ZAB PLOVER PLUGH
NUL NIL
I find that:
(find-word-association-in-file "FOO" "delete-me.text") => "OOF"
(find-word-association-in-file "BAZ" "delete-me.text") => "ZAB"
(find-word-association-in-file "NUL" "delete-me.text") => "NIL"
(find-word-association-in-file "GEE" "delete-me.text") => NIL
| Sysop: | Amessyroom |
|---|---|
| Location: | Fayetteville, NC |
| Users: | 65 |
| Nodes: | 6 (0 / 6) |
| Uptime: | 05:23:42 |
| Calls: | 862 |
| Files: | 1,311 |
| D/L today: |
921 files (14,318M bytes) |
| Messages: | 264,603 |