Re: cl-ppcre question

Liste des GroupesRevenir à cl lisp 
Sujet : Re: cl-ppcre question
De : Nobody447095 (at) *nospam* here-nor-there.org (B. Pym)
Groupes : comp.lang.lisp
Date : 07. Aug 2024, 20:21:42
Autres entêtes
Organisation : A noiseless patient Spider
Message-ID : <v90hg5$3a46d$1@dont-email.me>
User-Agent : XanaNews/1.18.1.6
Madhu wrote:

| I would like to parse color names in X11's rgb.txt.  They look like this:
|
| 119 136 153             light slate gray
| 119 136 153             LightSlateGray
|
| When parsing each line, I would like to get the color triplet, and the
| name.  I tried it like this:
|
| (let ((color-scanner
|        (cl-ppcre:create-scanner
|       "^ +([0-9]{0,2}) +([0-9]{0,2}) +([0-9]{0,2}) +([ a-zA-Z0-9]+)")))
|   (cl-ppcre:scan-to-strings color-scanner " 1 2 3  foo bar baz    "))
|
| This gives #("1" "2" "3" "foo bar baz ") for the substrings.  How can
| I get rid of the trailing spaces?
 
Use the right tool for the job :)
 
(defun parse-rgb-line (string &key (start 0) end)
  (multiple-value-bind (r endr)
      (parse-integer string :start start :end end :junk-allowed t)
    (multiple-value-bind (g endg)
        (parse-integer string :start (1+ endr) :end end :junk-allowed t)
      (multiple-value-bind (b endb)
          (parse-integer string :start (1+ endg) :end end :junk-allowed t)
        (let ((name-startpos
               (position-if-not (lambda (c) (case c ((#\Tab #\Space) t)))
                                string :start (1+ endb))))
          (values (format nil "#~2,'0X~2,'0X~2,'0X" r g b)
                  (subseq string name-startpos end)))))))              

newLISP

(define (parse-rgb-line s)
  (find-all
    {(\d+)|(\S.*)}
    (trim s)
    (or (int $0) $0)))

(parse-rgb-line "119 136 153             light slate gray  ")

(119 136 153 "light slate gray")

Date Sujet#  Auteur
7 Aug 24 o Re: cl-ppcre question1B. Pym

Haut de la page

Les messages affichés proviennent d'usenet.

NewsPortal