明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1322|回复: 9

[函数] 拆分字符串

[复制链接]
发表于 2021-10-31 17:51 | 显示全部楼层 |阅读模式
  1. (defun str2lst (str / nstr)
  2.        (if (= str "")
  3.          nil
  4.          (cond ((> 216 (ascii str) 175)
  5.           (cons  (substr str 1 2)
  6.           (str2lst (substr str 3))
  7.           )
  8.          )
  9.          ((wcmatch str "#*#`.#*")
  10.           (cons
  11.             (setq nstr
  12.              (strcat
  13.                (setq
  14.                  nstr (rtos (atof str))
  15.                )
  16.                (if
  17.                  (= "0"
  18.               (substr
  19.                 str
  20.                 (1+ (strlen nstr))
  21.                 1
  22.               )
  23.                  )
  24.             "0"
  25.             ""
  26.                )
  27.              )
  28.             )
  29.             (str2lst
  30.               (substr str (1+ (strlen nstr)))
  31.             )
  32.           )
  33.          )
  34.          ((wcmatch str "#*")
  35.           (cons
  36.             (setq
  37.               nstr (itoa (atoi str))
  38.             )
  39.             (str2lst
  40.               (substr str (1+ (strlen nstr)))
  41.             )
  42.           )
  43.          )
  44.          ((wcmatch str "@*")
  45.           (cons  (substr str 1 1)
  46.           (str2lst (substr str 2))
  47.           )
  48.          )
  49.          (t
  50.           (cons  (substr str 1 1)
  51.           (str2lst (substr str 2))
  52.           )
  53.          )
  54.          )
  55.        )
  56.            )

(STR2LST "k1y12.30人2+1")---》
("k" "1" "y" "12.30" "人" "2" "+" "1")

评分

参与人数 2明经币 +2 收起 理由
guosheyang + 1 赞一个!
tigcat + 1 很给力!

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下
 楼主| 发表于 2021-11-1 18:08 | 显示全部楼层
轮回 发表于 2021-11-1 09:41
测试了,cad2012是可以的,

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

不知道 要不你用6楼的  这个 是随手写的
回复 支持 1 反对 0

使用道具 举报

发表于 2021-11-1 13:21 | 显示全部楼层
字符串还是用正则表达式吧,处理起来比较方便。
  1. (xxexp "[\\d|\\.]+|\\D+" "few0.25sdi03Ep检" nil)
  2. ("few" "0.25" "sdi" "03" "Ep检")
  3. (xxexp "[\\d|\\.]+|\\D+" "k1y12.30人2+1" nil)
  4. ("k" "1" "y" "12.30" "人" "2" "+" "1")
  5. (defun xxexp (pat str key / end)
  6.   ;(princ "\n ★"一刀屠文"(xxexp)(xxexpr) = 对字符串进行正则表达式测试及替换-by 梁雄啸.2007.7")
  7.   (vl-load-com)
  8.   (if (not *xxvbsexp)
  9.     (setq *xxvbsexp (vlax-get-or-create-object "VBScript.RegExp"))
  10.   )
  11.   (vlax-put *xxvbsexp 'Pattern pat)
  12.   (if (not key)(setq key ""))  
  13.   (setq key (strcase key))
  14.   (setq keys '(("I"  "IgnoreCase")("G"  "Global")("M"  "Multiline")))
  15.   (mapcar '(lambda(x)
  16.              (if (wcmatch key (strcat "*" (car x) "*"))
  17.                (vlax-put *xxvbsexp (read(cadr x)) 0)
  18.                (vlax-put *xxvbsexp (read(cadr x)) -1)
  19.                ))
  20.           keys)
  21.   (setq matches (vlax-invoke *xxvbsexp 'Execute str))
  22.   (vlax-for x matches (setq end (cons (vla-get-value x) end)))
  23.   (reverse end)
  24. )
回复 支持 1 反对 0

使用道具 举报

发表于 2021-10-31 19:51 | 显示全部楼层
(STR2LST "k1y12.30人2+1")
("k" "1.00000" "人" "2" "+" "1")
为什么我生成的是这样的???
 楼主| 发表于 2021-10-31 20:03 | 显示全部楼层
轮回 发表于 2021-10-31 19:51
(STR2LST "k1y12.30人2+1")
("k" "1.00000" "人" "2" "+" "1")
为什么我生成的是这样的???

unitmode系统变量设置成0
发表于 2021-11-1 09:21 | 显示全部楼层
(STR2LST "few0.25sdi03Ep检")
返回:("f" "e" "w" "0" "." "25" "s" "d" "i" "3" "3" "E" "p" "检")
发表于 2021-11-1 09:41 | 显示全部楼层
kkq0305 发表于 2021-10-31 20:03
unitmode系统变量设置成0

测试了,cad2012是可以的,

cad2008,UNITMODE设置为0,也不行,
发表于 2021-11-6 18:51 | 显示全部楼层
springwillow 发表于 2021-11-1 13:21
字符串还是用正则表达式吧,处理起来比较方便。

end变量可能要改个名字,否则在一些cad版本中提示有冲突
发表于 2022-2-2 12:07 | 显示全部楼层
非常好的代码,正需要的
发表于 2022-2-3 15:36 | 显示全部楼层
springwillow 发表于 2021-11-1 13:21
字符串还是用正则表达式吧,处理起来比较方便。

你好大神我一直用你的孤帆工具箱可是目前只支持到2019,不知道现在是否支持2022了,如果有了话,麻烦发一个我可以吗,在此万分感谢,祝你新年快乐。我的邮箱664571221@qq.com
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-1 23:36 , Processed in 0.550344 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表