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 : 27. Jun 2025, 17:54:38
Autres entêtes
Organisation : A noiseless patient Spider
Message-ID : <103micc$8rr4$1@dont-email.me>
References : 1 2
User-Agent : XanaNews/1.18.1.6
B. Pym wrote:

B. Pym wrote:
 
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)))))))              
 
Gauche Scheme
 
(use srfi-13)  ;; string-trim-both
 
(define (parse-rgb-line line)
  (with-input-from-string line
    (lambda()
      (append
        (list (read) (read) (read))
        (list (string-trim-both (read-line)))))))
 
(parse-rgb-line "  255  88 6   yes  no   ")
  ===>
(255 88 6 "yes  no")

Shorter:

(define (parse-rgb-line line)
  (with-input-from-string line
    (lambda()
      (list (read) (read) (read) (string-trim-both (read-line))))))



Date Sujet#  Auteur
7 Aug 24 * Re: cl-ppcre question3B. Pym
27 Jun 25 `* Re: cl-ppcre question2B. Pym
27 Jun 25  `- Re: cl-ppcre question1B. Pym

Haut de la page

Les messages affichés proviennent d'usenet.

NewsPortal