马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
 - ;;; ------------------------------------------------------------------------
- ;;; 函数名称 / Function Name: XD::STR:to-list
- ;;;
- ;;; 【功能说明 / Description】
- ;;; 将一个字符串按指定分隔符切分成一个字符串列表。
- ;;; Splits a string into a list of substrings based on a given delimiter.
- ;;;
- ;;; 【参数说明 / Parameters】
- ;;; a - 分隔符字符串,例如 ";"。
- ;;; Delimiter string, e.g., ";".
- ;;; b - 要分割的字符串,例如 "A;B;C"。
- ;;; The target string to split, e.g., "A;B;C".
- ;;;
- ;;; 【返回值 / Return Value】
- ;;; 返回一个字符串列表,每个元素是原始字符串中被分隔符拆分的部分。
- ;;; Returns a list of substrings split from the original string.
- ;;;
- ;;; 【依赖函数 / Dependencies】
- ;;; - XD::STR:m-find:查找所有匹配子串的位置,返回一个整数列表。
- ;;; XD::STR:m-find: Finds all positions of the delimiter and returns an index list.
- ;;;
- ;;; 【使用示例 / Example Usage】
- ;;; (XD::STR:to-list ";" "A;B;C") => '("A" "B" "C")
- ;;; (XD::STR:to-list "," "hello,world") => '("hello" "world")
- ;;;
- ;;; 【备注 / Notes】
- ;;; - 支持任意长度的分隔符。
- ;;; Supports multi-character delimiters.
- ;;; - 如果未找到分隔符,返回的列表只包含原始字符串。
- ;;; If no delimiter is found, returns the original string as the sole element.
- ;;; ------------------------------------------------------------------------
- (defun XD::STR:to-list (a b / n c lst lst2 leng)
- ;; 查找所有分隔符的位置 / Find all delimiter positions
- (setq lst (XD::STR:m-find a b))
- (setq n 0)
- (if lst
- (progn
- ;; 提取第一个分隔符之前的部分 / Part before the first delimiter
- (setq c (substr b 1 (- (nth 0 lst) 1)))
- (setq lst2 (append lst2 (list c)))
- ;; 提取中间每段 / Parts between delimiters
- (repeat (- (length lst) 1)
- (setq leng (- (nth (+ n 1) lst) (nth n lst) (strlen a)))
- (setq c (substr b (+ (nth n lst) (strlen a)) leng))
- (setq lst2 (append lst2 (list c)))
- (setq n (+ 1 n))
- )
- ;; 提取最后一段 / Part after the last delimiter
- (setq c (substr b (+ (nth n lst) (strlen a))))
- (setq lst2 (append lst2 (list c)))
- )
- ;; 如果没有分隔符,直接返回整个字符串 / No delimiter found: return the string as a single-element list
- (progn
- (setq lst2 (append lst2 (list b)))
- )
- )
- lst2
- )
|