明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1414|回复: 4

[源码] 遇到数字断开用来取前缀或者是尾缀

[复制链接]
发表于 2024-9-11 08:26:01 | 显示全部楼层 |阅读模式
本帖最后由 dcl1214 于 2024-9-11 08:27 编辑

最近遇到多人画图的时候,每个人自己有一个代号,用来标注物料球,或者是图纸中某一些图形用特殊前缀加数字尾缀来做区分的情况,我在提取数据的时候,经常需要做分类,而且还要查漏补缺,所以,我写了一个遇到数字断开的函数
  1. (defun $yu-dao-shu-zi-duan-kai$
  2.        (str pos pos-fh / a go n-i s1 ss str-n str-num str->chrlist )
  3.           ;遇到数字断开
  4.           ;pos 正向还是反向,传入数字0代表从第一位开始,传入数字1代表从最后一位开始分析
  5.           ;pos-fh 0代表从断开点往左的返回,1代表是从断开点往右的返回         
  6.           ;($yu-dao-shu-zi-duan-kai$ "BD15A" 0 0)

  7. (defun str->chrlist (str / lst carlst cadrlst relst)
  8.                                         ;字符串转表,不是分割成表
  9.   (AND str (setq lst (vl-string->list str)))
  10.   (while lst
  11.     (setq carlst (car lst))
  12.     (setq cadrlst (cadr lst))
  13.     (if        (< carlst 129)
  14.       (progn (setq relst (cons (list carlst) relst))
  15.              (setq lst (cdr lst))
  16.       )
  17.       (progn (setq relst (cons (list carlst cadrlst) relst))
  18.              (setq lst (cddr lst))
  19.       )
  20.     )
  21.   )
  22.   (IF relst
  23.     (mapcar 'vl-list->string (reverse relst))
  24.   )
  25. )
  26.   (or pos (setq pos 0))
  27.   (and str (setq ss (str->chrlist str)))
  28.   (and (= pos 1) (setq ss (reverse ss)))
  29.   (SETQ s1 NIL)
  30.   (setq go t)
  31.   (while (and go (setq a (car ss)))
  32.     (if  (AND A
  33.        (member a (list "0" "1" "2" "3" "4" "5" "6" "7" "8" "9"))
  34.   )
  35.       (progn
  36.   (setq go nil)
  37.       )
  38.       (setq s1 (cons a s1))
  39.     )
  40.     (if  go
  41.       (setq ss (cdr ss))
  42.     )
  43.   )
  44.   (setq s1 (reverse s1))
  45.   (IF (= pos 1)
  46.     (PROGN
  47.       (setq ss (reverse ss))
  48.       (AND S1 (setq s1 (reverse s1)))
  49.     )
  50.   )
  51.   (OR
  52.     (and ss (= pos-fh 1) (setq str-n (apply 'strcat ss)))
  53.     (and ss (= pos-fh 0) (setq str-n (apply 'strcat s1)))
  54.     (setq str-n (apply 'strcat s1))
  55.   )
  56.   str-n
  57. )


点评

最好能举个例子以便于理解  发表于 2024-9-13 08:52

评分

参与人数 2明经币 +2 收起 理由
xyp1964 + 1 赞一个!
tryhi + 1

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2024-9-12 09:54:20 | 显示全部楼层
不错,不过一般用正则可能更简单,表达式写“\\D+”即可,然后 [1]就是往右,last就是最后一位开始
发表于 2024-9-13 08:28:52 | 显示全部楼层
暂时没有这个需求,不过鼓励分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-22 20:44 , Processed in 0.187399 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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