几个字符串分割函数
本帖最后由 wzg356 于 2023-3-11 18:17 编辑字符串分割论坛很多了,实际使用中也难直接套用,这里算是给新手分享经验
第一个函数功能用的较多,以前一直用“老黄老师”收集的字符串分割parse4,我用时函数名都懒得改,这里算仿写并部分扩展了,效率还行
;字符串分割成表
;str要分割的字符串
;delim用于分割的字符集合,可以汉字,每个字符/汉字均作分割符
;注释的语句取消注释则返回的表中包含分割符组成的字串
;扩展用于消除特定字符,分离数字/字母等
;(mystrparse2 "AA6aB我3bCC55c" "我0123456789")=("AA" "aB" "bCC" "c")
(defun mystrparse2 (str delim / str1 str2 L)
(setq str (reverse(vl-string->list str)))
(setq str1 "" str2 "")
(while(setq a(car str))
(if(> a 160)
(setq a(vl-list->string(list(cadr str)a))str(cddr str))
(setq a(chr a)str(cdr str))
)
(if (vl-string-search a delim)
(setq ;str2(strcat a str2)
l(cons str1 l) str1 ""
)
(setq str1(strcat a str1)
;l(cons str2 l)str2 ""
)
)
)
(vl-remove ""(cons str2 (cons str1 l)))
)
;字符末尾数字分离
;(strparsenum1 "0a3b55c801")=("0a3b55c" "801")
(defun strparsenum1 (str / n)
(setq n(strlen (vl-string-right-trim "0123456789"str)))
(list(substr str 1 n)(substr str(1+ n)))
)
;字符前数字分离
;(strparsenum2 "500a3b55c")=("500" "a3b55c")
(defun strparsenum2 (str / n)
(setq n(strlen (vl-string-left-trim "0123456789"str)))
(list(substr str 1(- (strlen str)n))(substr str (- (strlen str) n -1)))
)
;字符前后数字分离
;(setq l(strparsenum2 "a3b55c801") l(cons(car l)(strparsenum1(cadr l))))
;=("" "a3b55c" "801")
;以字符串为分隔符分割字符串成表
;明经收集小改
;;By Longxin 明经通道 2006.03
(defun xl:read->biao (str fgf / biao n s1 i)
(setq biao nil n(strlen fgf))
(setq i (vl-string-search fgf str))
(while i
(setq s1 (substr str 1 i))
(setq str (substr str (+ 1 n i)))
(setq biao (cons s1 biao))
(setq i (vl-string-search fgf str))
)
(reverse(cons str biao))
)
非常感谢楼主分享好源码 支持支持!谢楼主分享!
页:
[1]