明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4197|回复: 16

求助自动数字递增

  [复制链接]
发表于 2010-4-26 22:04 | 显示全部楼层 |阅读模式

请问如何实现下面的数字递增:

ABC-123-50改为ABC-124-50,也就是将一组数字中间的那个递增,其他不变,请高手指点啊,谢谢!!!

发表于 2010-4-26 23:51 | 显示全部楼层

Try this

(setq txt (ssget ":S" '((0 . "TEXT")))
      txt (ssname txt 0)
      dat (entget txt)
      txt (cdr (assoc 1 dat))
)
(entmod
  (subst
    (cons 1     
      (strcat
        (substr txt 1 4)
        (itoa (1+ (atoi (substr txt 5 3))))
        (substr txt 8) 
      )
    )
    (assoc 1 dat)
    Dat
) )

 楼主| 发表于 2010-4-27 10:55 | 显示全部楼层

非常感谢您的程序,确实可以用,但是我还有一个问题,就是如果我前面的字母个数不定,那应该如何做呢,还有可不可以实现连续操作,如下面的形式:ABC-001-50

      ABCD-001-80

      EF-001-100

经过连续操作以后,数字改为:ABC-002-50

                                                ABCD-003-80

                                                EF-004-100

 楼主| 发表于 2010-4-27 19:40 | 显示全部楼层
有高手能帮一下忙吗,这个估计难度不小
发表于 2010-4-28 10:46 | 显示全部楼层
找找以前的帖子,文本分割
发表于 2010-4-28 11:20 | 显示全部楼层
本帖最后由 作者 于 2010-5-7 22:06:15 编辑

  1. ;;; 解析字符串为表(函数来自明经通道转载)
  2. ;;; ---------------------------------------------------------------------------------
  3. (defun strParse    (Str Delimiter / SearchStr StringLen return n char)
  4.   (setq SearchStr Str)
  5.   (setq StringLen (strlen SearchStr))
  6.   (setq return '())
  7.   (while (> StringLen 0)
  8.     (setq n 1)
  9.     (setq char (substr SearchStr 1 1))
  10.     (while (and (/= char Delimiter) (/= char ""))
  11.       (setq n (1+ n))
  12.       (setq char (substr SearchStr n 1))
  13.     ) ;_ end of while
  14.     (setq return (cons (substr SearchStr 1 (1- n)) return))
  15.     (setq SearchStr (substr SearchStr (1+ n) StringLen))
  16.     (setq StringLen (strlen SearchStr))
  17.   ) ;_ end of while
  18.   (reverse return)
  19. ) ;_ end of defun
  20. ;;; 反解析表为字符串(函数来自明经通道转载)
  21. ;;; ---------------------------------------------------------------------------------
  22. (defun StrUnParse (Lst Delimiter / return)
  23.   (setq return "")
  24.   (foreach str Lst
  25.     (setq return (strcat return Delimiter str))
  26.   ) ;_ end of foreach
  27.   (substr return 2)
  28. ) ;_ end of defun
  29. (defun c:tt()
  30.   (setq i (getint "\输入起始数字:"))
  31.   (while (setq txt (ssget ":S" '((0 . "TEXT"))))
  32.   (setq
  33. txt (ssname txt 0)
  34. dat (entget txt)
  35. str (cdr (assoc 1 dat))
  36.   )
  37.   
  38.   (setq strlst (strParse Str "-"))
  39.   (setq numws (strlen (nth 1 strlst)))
  40.   (setq txt_num_new (itoa i ))
  41.   (repeat (- numws (strlen txt_num_new))
  42.       (setq txt_num_new  (strcat "0" txt_num_new))
  43.   )
  44.   
  45.   (setq nuwstr (StrUnParse (list (car strlst) txt_num_new (last  strlst)) "-"))
  46.   (entmod
  47.     (subst
  48.       (cons 1  nuwstr  )
  49.       (assoc 1 dat)
  50.       Dat
  51.   ) )
  52.   (setq i (1+ i))
  53.   )
  54. )
 楼主| 发表于 2010-4-28 16:30 | 显示全部楼层
非常感谢楼上的高手,用起来很方便,再次谢谢你!!
 楼主| 发表于 2010-5-7 20:32 | 显示全部楼层

再次求助高手帮帮忙,如果是四组数据,6楼的程序该如何改写啊?

例如  ABC-001-50-2A2.要使其中的001连续递增。谢谢各位了

发表于 2010-5-7 22:18 | 显示全部楼层
稍微修改一下就可以了。适合
ABC-123-50
ABC-123-50-131
ABC-123-50-131-123212
其中123数字的递增
  1. ;;; 解析字符串为表(函数来自明经通道转载)
  2. ;;; ---------------------------------------------------------------------------------
  3. (defun strParse    (Str Delimiter / SearchStr StringLen return n char)
  4.   (setq SearchStr Str)
  5.   (setq StringLen (strlen SearchStr))
  6.   (setq return '())
  7.   (while (> StringLen 0)
  8.     (setq n 1)
  9.     (setq char (substr SearchStr 1 1))
  10.     (while (and (/= char Delimiter) (/= char ""))
  11.       (setq n (1+ n))
  12.       (setq char (substr SearchStr n 1))
  13.     ) ;_ end of while
  14.     (setq return (cons (substr SearchStr 1 (1- n)) return))
  15.     (setq SearchStr (substr SearchStr (1+ n) StringLen))
  16.     (setq StringLen (strlen SearchStr))
  17.   ) ;_ end of while
  18.   (reverse return)
  19. ) ;_ end of defun
  20. ;;; 反解析表为字符串(函数来自明经通道转载)
  21. ;;; ---------------------------------------------------------------------------------
  22. (defun StrUnParse (Lst Delimiter / return)
  23.   (setq return "")
  24.   (foreach str Lst
  25.     (setq return (strcat return Delimiter str))
  26.   ) ;_ end of foreach
  27.   (substr return 2)
  28. ) ;_ end of defun
  29. ;EF-001-100
  30. (defun c:tt()
  31.   (setq i (getint "\输入起始数字:"))
  32.   (while (setq txt (ssget ":S" '((0 . "TEXT"))))
  33.   (setq
  34. txt (ssname txt 0)
  35. dat (entget txt)
  36. str (cdr (assoc 1 dat))
  37.   )
  38.   ;(setq str "ABC-001-50-2A2") ;test
  39.   (setq strlst (strParse Str "-"))
  40.   (setq numws (strlen (nth 1 strlst)))
  41.   (setq txt_num_new (itoa i ))
  42.   (repeat (- numws (strlen txt_num_new))
  43.       (setq txt_num_new  (strcat "0" txt_num_new))
  44.   )
  45.   (setq nuwstr (StrUnParse (append (list (car strlst))(list txt_num_new) (cddr  strlst)) "-"))
  46.   (entmod
  47.     (subst
  48.       (cons 1  nuwstr  )
  49.       (assoc 1 dat)
  50.       Dat
  51.   ) )
  52.   (setq i (1+ i))
  53.   )
  54. )
 楼主| 发表于 2010-5-8 16:24 | 显示全部楼层
xshrimp太感谢你了,非常感谢你的帮助!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-6-17 19:19 , Processed in 0.146726 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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