雨的节奏 发表于 2023-6-16 10:09:54

常用函数 ,字符串分割,字符串合并


;;字符串分割
;;用法, (str_Split "5+10+A“ ”+“)---》(list"5" "10" "A”)
;**************************************************
(defun str_Split (strkey/ L r)
    (setq r (vlax-create-object "vbscript.regexp"))
   (vlax-put-property r 'Global 1)
   (vlax-put-property r 'Pattern (strcat "([^" key "]+)"))
   (vlax-for x (vlax-invoke r 'Execute str) (setq L (cons(vla-get-Value x) L)))
   (vlax-release-object r)
   (reverse L)
)


;;字符串合并
;;用法 (string join (list "a" "b" "c") "+") --------->"a+b+c"
(defun string_join (lst key / str e)
(setq strs "")
(foreach x lst
(if (= strs "")
      (setq strs x)
      (setq strs (strcat strskey x))
    )
   )
strs
)


1028695446 发表于 2023-6-16 10:29:33

(defun Split-ZZ        (s p / L r)
(setq r (vlax-create-object "vbscript.regexp"))
(vlax-put-property r 'Global 1)
(vlax-put-property r 'Pattern (strcat "([^" p "]+)"))
(vlax-for x (vlax-invoke r 'Execute s)
    (setq L (cons (vla-get-Value x) L))
)
(vlax-release-object r)
(reverse L)
)

(Split-ZZ "BL-01=500x300""=|x");返回'("BL-01" "500" "300")

自贡黄明儒 发表于 2023-6-16 11:28:46

凑热闹的
字符串合并
(defun strcat+ (lis / SYMBOL X)
(if (vl-every 'numberp lis)
    (apply '+ lis)
    (apply 'strcat (mapcar 'vl-princ-to-string lis))
)
)

magicheno 发表于 2023-6-16 12:56:36

感谢大佬分享~

tryhi 发表于 2023-6-16 15:37:03

本帖最后由 tryhi 于 2023-6-16 15:46 编辑

作为一个拆分函数,我感觉不太好用


1、不支持多个字符作为拆分
(str_Split "5+-10+A" "+-") ;>> ("5" "10" "A”)
期望值应为("5" "10+A")

2、反斜杠拆分报错
(str_Split "5\\10\\A" "\\") ;>>报错

3、不支持空字符拆分
(str_Split "510A" "") ;>>报错
期望值应为("5" "1" "0" "A")

4、不支持拆分出空字符
(str_Split "5++10+A" "+") ;>> ("5" "10" "A”)
期望值应为("5" "" "10" "A")

5、vbscript.regexp组件经测试有很多电脑不能使用


合并函数中的strs使用了全局变量,容易导致外部同名函数异常,也是有问题的

MZ_li 发表于 2023-6-16 16:04:37

好东西,立马收藏

vitalgg 发表于 2023-6-16 22:55:57

本帖最后由 vitalgg 于 2023-6-17 16:18 编辑

tryhi 发表于 2023-6-16 15:37
作为一个拆分函数,我感觉不太好用










感谢大佬


菜卷鱼 发表于 2023-6-17 08:41:36

tryhi 发表于 2023-6-16 15:37
作为一个拆分函数,我感觉不太好用




第3个,空字符的不好拆吧,汉字

菜卷鱼 发表于 2023-6-17 17:14:18

搞了一个不常见的方式,分割字符串
(defun str_split (str key)
(if (/= key "")
    (progn
      (while (vl-string-search key str)
        (setq str (vl-string-subst "\" \"" key str))
      )
      (read (strcat "(\"" str "\")"))
    )
    str
)
)

wharan 发表于 2023-6-18 15:15:54

1028695446 发表于 2023-6-16 10:29
(defun Split-ZZ        (s p / L r)
(setq r (vlax-create-object "vbscript.regexp"))
(vlax-put-property ...

这个,我正准备做,发现了,好用,点赞
页: [1] 2
查看完整版本: 常用函数 ,字符串分割,字符串合并