Re: string search and assignment

Liste des GroupesRevenir à cl lisp 
Sujet : Re: string search and assignment
De : No_spamming (at) *nospam* noWhere_7073.org (B. Pym)
Groupes : comp.lang.lisp
Date : 02. Jul 2024, 21:38:09
Autres entêtes
Organisation : A noiseless patient Spider
Message-ID : <v61kut$1p0ar$1@dont-email.me>
User-Agent : XanaNews/1.18.1.6
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


Gauche Scheme

(use file.util) ;; file->string-list
(use srfi-13) ;; string-tokenize
(use srfi-14) ;; character-sets

;; Assumes that the "next word" has to be on the same line.
(define (find-word-association-in-file word file)
  (any
    (lambda (line)
      (let* ((words (string-tokenize line char-set:letter))
             (tail (member word words string=?)))
        (and tail (pair? (cdr tail)) (cadr tail))))
    (file->string-list file)))

(find-word-association-in-file "FOO" "delete-me.txt")
  ===>
"OOF"

(find-word-association-in-file "PLOVER" "delete-me.txt")
  ===>
"PLUGH"

(find-word-association-in-file "PLUGH" "delete-me.txt")
  ===>
#f

Date Sujet#  Auteur
2 Jul 24 * Re: string search and assignment2B. Pym
3 Jul 24 `- Re: string search and assignment1Kaz Kylheku

Haut de la page

Les messages affichés proviennent d'usenet.

NewsPortal