帮忙处理字符串.lsp

分类:lisp函数 | 标签: lisp   字符串   分割   处理  
2018-12-24 10:06 阅读(?)评论(0)

帮忙处理字符串.lsp


(vl-load-com)
;;;=================================================================*
;;;    通用函数                                                     *
;;;功能:字符串分割                                                 *
;;;参数:STR -----欲分割的字符串                                    *
;;;      stri-----分隔符                                            *
;;;日期:zml84 于 2009-04-14                                        *
;;;示例:(ZL-STRING-FG "1,2,3" ",")   ==> ("1" "2" "3")             *
(defun ZL-STRING-FG (STR STRI / I)
  (if (setq I (vl-string-search STRI STR))
    (cons (substr STR 1 I)
	  (ZL-STRING-FG (substr STR (+ I 1 (strlen STRI))) STRI)
    )
    (list STR)
  )
)
;;;=================================================================*

;|需求:将带"-"的字符串"1 3 5-10 12 15"转换为"1 3 5 6 7 8 9 10 12 15"

示例:

|;
;;;=================================================================*
;;功能:
;;参数:
;;测试01:
;;      输入:"4-6 8 12-19"
;;      返回:(4 5 6 8 12 13 14 15 16 17 18 19)
;;测试02:
;;      输入:"4-6,8,12to19"
;;      返回:(4 5 6 8 12 13 14 15 16 17 18 19)
;;备注:仅支持整数
;;      一级分隔符标准为空格
;;      二级分隔符标准为减号
(defun test (str / LST S TMP)
  ;;1、替换分隔符
  (setq	str (vl-string-subst " " "," str)
	str (vl-string-subst " " "," str)
  )
  (setq	str (strcase str)
	str (vl-string-subst "-" "TO" str)
	str (vl-string-subst "-" "_" str)
	str (vl-string-subst "-" "—" str)
	str (vl-string-subst "-" "S" str)
	str (vl-string-subst "-" "SETP" str)
  )
  ;;2、逐个处理
  (setq
    lst	(mapcar
	  (function (lambda (S / TMP)
		      (setq tmp	(ZL-STRING-FG S "-")
			    tmp	(mapcar 'atoi tmp)
		      )
		      (cond ((= (length tmp) 1)
			     tmp
			    )
			    ((= (length tmp) 2)
			     (test02 (car tmp) (cadr tmp) 1)
			    )
			    (t
			     (test02 (car tmp) (cadr tmp) (caddr tmp))
			    )
		      )
		    )
	  )
	  (ZL-STRING-FG str " ")
	)
  )
  ;;3、整合,返回
  (apply 'append lst)
)


;;;=================================================================*
;;;功能:
;;测试01:
;;      输入:2 5 1
;;      返回:(2 3 4 5)
;;测试02:
;;      输入:2 10 2
;;      返回:(2 4 6 8 10)
;;;备忘:参数均为整数
(defun test02 (I J S / tmp lst)
  ;;整理传入参数
  (setq	tmp (min i j)
	j   (max i j)
	i   tmp
	s   (abs s)
  )
  ;;逐个收入
  (setq lst '())
  (while (<= i j)
    (setq lst (cons i lst)
	  i   (+ i s)
    )
  )
  ;;返回
  (reverse lst)
)








  最后修改于 2020-02-03 14:38    阅读(?)评论(0)
 
表  情:
加载中...
 

请各位遵纪守法并注意语言文明