kkq0305 发表于 2021-10-31 17:51:29

拆分字符串

(defun str2lst (str / nstr)
       (if (= str "")
         nil
         (cond ((> 216 (ascii str) 175)
          (cons(substr str 1 2)
          (str2lst (substr str 3))
          )
         )
         ((wcmatch str "#*#`.#*")
          (cons
            (setq nstr
             (strcat
               (setq
               nstr (rtos (atof str))
               )
               (if
               (= "0"
            (substr
                str
                (1+ (strlen nstr))
                1
            )
               )
            "0"
            ""
               )
             )
            )
            (str2lst
            (substr str (1+ (strlen nstr)))
            )
          )
         )
         ((wcmatch str "#*")
          (cons
            (setq
            nstr (itoa (atoi str))
            )
            (str2lst
            (substr str (1+ (strlen nstr)))
            )
          )
         )
         ((wcmatch str "@*")
          (cons(substr str 1 1)
          (str2lst (substr str 2))
          )
         )
         (t
          (cons(substr str 1 1)
          (str2lst (substr str 2))
          )
         )
         )
       )
         )
(STR2LST "k1y12.30人2+1")---》
("k" "1" "y" "12.30" "人" "2" "+" "1")

kkq0305 发表于 2021-11-1 18:08:24

轮回 发表于 2021-11-1 09:41
测试了,cad2012是可以的,

cad2008,UNITMODE设置为0,也不行,

不知道 要不你用6楼的这个 是随手写的

springwillow 发表于 2021-11-1 13:21:15

字符串还是用正则表达式吧,处理起来比较方便。
(xxexp "[\\d|\\.]+|\\D+" "few0.25sdi03Ep检" nil)
("few" "0.25" "sdi" "03" "Ep检")
(xxexp "[\\d|\\.]+|\\D+" "k1y12.30人2+1" nil)
("k" "1" "y" "12.30" "人" "2" "+" "1")
(defun xxexp (pat str key / end)
;(princ "\n ★\"一刀屠文\"(xxexp)(xxexpr) = 对字符串进行正则表达式测试及替换-by 梁雄啸.2007.7")
(vl-load-com)
(if (not *xxvbsexp)
    (setq *xxvbsexp (vlax-get-or-create-object "VBScript.RegExp"))
)
(vlax-put *xxvbsexp 'Pattern pat)
(if (not key)(setq key ""))
(setq key (strcase key))
(setq keys '(("I""IgnoreCase")("G""Global")("M""Multiline")))
(mapcar '(lambda(x)
             (if (wcmatch key (strcat "*" (car x) "*"))
             (vlax-put *xxvbsexp (read(cadr x)) 0)
             (vlax-put *xxvbsexp (read(cadr x)) -1)
             ))
          keys)
(setq matches (vlax-invoke *xxvbsexp 'Execute str))
(vlax-for x matches (setq end (cons (vla-get-value x) end)))
(reverse end)
)

轮回 发表于 2021-10-31 19:51:13

(STR2LST "k1y12.30人2+1")
("k" "1.00000" "人" "2" "+" "1")
为什么我生成的是这样的???

kkq0305 发表于 2021-10-31 20:03:28

轮回 发表于 2021-10-31 19:51
(STR2LST "k1y12.30人2+1")
("k" "1.00000" "人" "2" "+" "1")
为什么我生成的是这样的???

unitmode系统变量设置成0

ssyfeng 发表于 2021-11-1 09:21:19

(STR2LST "few0.25sdi03Ep检")
返回:("f" "e" "w" "0" "." "25" "s" "d" "i" "3" "3" "E" "p" "检")

轮回 发表于 2021-11-1 09:41:00

kkq0305 发表于 2021-10-31 20:03
unitmode系统变量设置成0

测试了,cad2012是可以的,

cad2008,UNITMODE设置为0,也不行,

tigcat 发表于 2021-11-6 18:51:11

springwillow 发表于 2021-11-1 13:21
字符串还是用正则表达式吧,处理起来比较方便。

end变量可能要改个名字,否则在一些cad版本中提示有冲突

vladimir 发表于 2022-2-2 12:07:32

非常好的代码,正需要的

664571221 发表于 2022-2-3 15:36:19

springwillow 发表于 2021-11-1 13:21
字符串还是用正则表达式吧,处理起来比较方便。

你好大神我一直用你的孤帆工具箱可是目前只支持到2019,不知道现在是否支持2022了,如果有了话,麻烦发一个我可以吗,在此万分感谢,祝你新年快乐。我的邮箱664571221@qq.com
页: [1]
查看完整版本: 拆分字符串