• re: How to split a string (or arbitrary sequence) at each occurrence of

    From B. Pym@21:1/5 to Erik Haugan on Sat Jul 5 03:40:19 2025
    XPost: comp.lang.scheme

    Erik Haugan wrote:

    * Daniel Pittman <[email protected]>

    What is the best, easiest, fastest, etc, way to split a string into substrings based on a character position.


    (defun string-split (string &optional (delimiter #\Space))
    (with-input-from-string (*standard-input* string)
    (let ((*standard-output* (make-string-output-stream)))
    (loop for char = (read-char nil nil nil)
    if (or (null char)
    (char= char delimiter))
    collect (get-output-stream-string *standard-output*)
    else
    do (write-char char)
    while char))))

    Gauche Scheme

    ;; Preserves empty strings.
    (define (split-on-char text :optional (delimiter #\space))
    (let ((result '()) (tmp '()))
    (string-for-each
    (lambda (c)
    (if (char=? c delimiter)
    (begin
    (push! result tmp)
    (set! tmp '()))
    (push! tmp c)))
    text)
    (when (or (pair? result) (pair? tmp)) (push! result tmp))
    (reverse
    (map
    (lambda(xs) (list->string (reverse xs)))
    result))))


    (split-on-char "foo;bar" #\;)
    ===>
    ("foo" "bar")

    (split-on-char ";foo;;bar;" #\;)
    ===>
    ("" "foo" "" "bar" "")

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)