明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4697|回复: 15

编号批量复制递增 问题 (附图), 请高手来帮忙解决...........谢谢喽

  [复制链接]
发表于 2008-1-11 00:12 | 显示全部楼层 |阅读模式
如题    upload=jpg]UploadFile/2008-1/20081110101948753.jpg,viewFile.asp?ID=39366[/upload]
 楼主| 发表于 2008-1-11 00:15 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2008-1-11 09:01 | 显示全部楼层
本帖最后由 作者 于 2008-1-11 13:07:58 编辑

有规律就好写,只是楼主一楼的图片跟二楼的一样吗?

发表于 2008-1-11 11:14 | 显示全部楼层
能帮忙编个选择以数字结尾的文本,可以统一加减某一数字,如AW1/W1,AW1-1,加减完AW1/W3,AW1-3
发表于 2008-1-11 13:12 | 显示全部楼层
回4楼
给我一年前写的。。。当思路比较乱,现在重新可能会好些,但是功能是一样的。。。呵呵
  1. (princ "\n>>>请输入dnd,选择多个数字文本!<<<")
  2. (defun c:dnd (/       txt_add ss      slen    i       na      data
  3.        txt     txt_len nub     k       txt_each       num
  4.        num_len n       temp    txt0    n0      expt_num
  5.        faq1    faq2    int
  6.       )
  7.   (setq int (getint "\n不考虑后缀字符的位数<0>:"))
  8.   (if (= nil int)
  9.     (setq int 0)
  10.   ) ;_ end if
  11.   (setq txt_add (getint "\n请输入增值(默认为1):"))
  12.   (if (= nil txt_add)
  13.     (setq txt_add 1)
  14.   ) ;_ end if
  15.   (while (setq ss (ssget '((0 . "*text"))))
  16.     (setq slen (- (sslength ss) 1))
  17.     (setq i 0)
  18.     (while (<= i slen)
  19.       (setq na (ssname ss i))
  20.       (setq data (entget na))
  21.       (setq txt (cdr (assoc '1 data)))
  22.       (setq txt_len (strlen txt)) ;9
  23.       (setq txt_cut (substr txt 1 (- txt_len int))) ;abc02
  24.       (setq txt_len_cut (strlen txt_cut)) ;5
  25.       (setq txt_43 (substr txt (- txt_len (1- int)) int)) ;(03)
  26.       (setq nub "")
  27.       (setq k txt_len_cut)
  28.       (while (>= k 1)
  29. (setq txt_each (substr txt_cut k 1))
  30. (if (and (>= (ascii txt_each) 48) (<= (ascii txt_each) 57))
  31.      ;取字串中"0~9"中的ascii字符txt_each.
  32.    (progn
  33.      (setq nub (strcat txt_each nub))
  34.      (setq k (1- k))
  35.    )    ;end progn
  36.    (setq k 0)
  37. )    ;end if
  38.       )     ;end while
  39.       (if (= nub "")
  40. (progn
  41.    (princ "\n末尾不是数字")
  42.    (exit)
  43. ) ;_ end progn
  44.       ) ;_ end if
  45.       (setq num (atoi nub))  ;nub="02" num=2
  46.       (setq num_len (strlen nub)) ;2
  47. ;;;以下是考虑数字串中的零的问题
  48.       (setq n 1)
  49.       (setq temp 0)
  50.       (while (and (<= n num_len) (= temp 0))
  51. (setq txt0 (atof (substr nub n 1)))
  52. (if (/= txt0 0)
  53.    (progn
  54.      (setq n0 (1- n))
  55.      (setq temp 1)
  56.    ) ;_ end progn
  57. ) ;_ end if
  58. (setq n (1+ n))
  59.       )     ;end while
  60.       (setq expt_num (substr txt_cut 1 (+ n0 (- txt_len num_len int))))
  61.       (setq faq1 (itoa (+ num txt_add)))
  62.       (setq faq2 (strcat expt_num faq1 txt_43))
  63.       (setq data (subst (cons 1 faq2) (assoc '1 data) data))
  64.       (entmod data)
  65.       (setq i (+ i 1))
  66.     )     ;end while
  67.   )     ;end while
  68.   (prin1)
  69. ) ;_ end defun
 楼主| 发表于 2008-1-12 11:48 | 显示全部楼层

     一楼跟二楼 是一样的照片, 只是第一次上载照片, 出了差错.

很高兴你回复我的问题 ,只是楼主 对我的要求 会错意了.

我希望程序的目的没有 楼主给的那样复杂, 只是很简单 的 数字 批量复制递增(如图),

麻烦 CARROT1983 楼主 再次帮看一下 ,    先谢谢喽 !!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
 楼主| 发表于 2008-1-12 11:51 | 显示全部楼层

续 6 楼

还有  要加 前缀 跟 后缀.

发表于 2008-1-12 12:20 | 显示全部楼层

我有一个,但是只能是单个的文字,不能复制很多个

因为只是自己用,没有整理过,很乱

(defun c:gf()
(setq bc (getint "\n 请输入步长:"))
)


(defun c:saa()
(prompt "\n 设置步长命令为:gf,初始步长为1")
(prompt "\n 请选择不需要更改的实体:")
(if (= bc nil)
(setq bc 1)
)
(setq ddjjqq (ssget))
(setq entt  (entsel "\n 请选择一个文字:"))
(setq ent (car entt))
;(setq pt1 (cadr entt))
(redraw ent 3)
(setq dxf (entget ent))          ;联合列表
(setq wenzizu (assoc 1 dxf))     ;点对列表
(setq wenzi (cdr wenzizu))       ;文字

(setq wenzilen (strlen wenzi))
(setq fanyihou (vl-string-translate "1234567890" "##########" wenzi))  ;翻译字符

(setq weizhi (vl-string-search "#" fanyihou))  ;找出#的位置

(setq qianzhui (substr wenzi 1 weizhi))   ;取出前缀
(setq shuzi (substr wenzi (+ weizhi 1)))   ;取出字符串形式的数字
(setq shishu (atoi shuzi))   ;把数字改为实数


(setq pt1 (getpoint "\n 请选择一个点:"))
(setq pt2 (getpoint pt1 "\n 请选择第二点:"))
(setq n 0)

(while pt2

(setq lll (substr wenzi 1 1))  ;判断第一个字符是什么
;(setq llll (substr wenzi 4 1))  ;判断第四个字符是什么

(cond

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
( (= lll "<")                                           ;
(progn                                                  ;
(setq b (+ shishu bc n))                                ;
(setq c (itoa b))                                       ;
                                                        ;
(setq d (strcat qianzhui c ">"))                        ;
                                                        ;
(setq e (cons 1 d))                                     ;
(command "copy" ddjjqq "" pt1 pt2)           
(command "copy" ent "" pt1 pt2)
(setq ent1 (entget (entlast)))                          ;    ;此处为一个判断
(setq txtzh1 (assoc 1 ent1))                            ;
(setq ent1 (subst e txtzh1 ent1))                       ;
(entmod ent1)                                           ;
(princ)                                                 ;
)  ;end progn                                           ;
)  ;end first                                           ;
                                                        ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


                                                             ;如果要加判断的话,请选择这里

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(t                                                      ;
(progn                                                  ;
(setq b (+ shishu bc n))                                ;
(setq c (itoa b))                                       ;
(setq d (strcat qianzhui c))                            ;
(setq e (cons 1 d))                                     ;
(command "copy" ddjjqq "" pt1 pt2) 
(command "copy" ent "" pt1 pt2)                     ;    ;此处为第二个判断
(setq ent1 (entget (entlast)))                          ;
(setq txtzh1 (assoc 1 ent1))                            ;
(setq ent1 (subst e txtzh1 ent1))                       ;
(entmod ent1)                                           ;
(princ)                                                 ;
)                                                       ;
)                                                       ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


)  ;end cond


(setq n (+ bc n))
(setq pt2 (getpoint pt1 "\n 请选择第二点:"))     ;pt1决定有没有显示线

)    ;end while
)    ;end defun

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;                   以下为输入单个字的命令                    ;;;;;;;;;;;;;;;;


(defun c:sa()

(prompt "\n 设置步长命令为:gf,初始步长为1")
(if (= bc nil)
(setq bc 1)
)

(setq enty (entsel "\n 请选择一个文字:"))
(setq ent (car enty))
;(setq pt1 (cadr enty))

(redraw ent 3)
(setq dxf (entget ent))          ;联合列表
(setq wenzizu (assoc 1 dxf))     ;点对列表
(setq wenzi (cdr wenzizu))       ;文字

(setq wenzilen (strlen wenzi))
(setq fanyihou (vl-string-translate "1234567890" "##########" wenzi))  ;翻译字符

(setq weizhi (vl-string-search "#" fanyihou))  ;找出#的位置

(setq qianzhui (substr wenzi 1 weizhi))   ;取出前缀
(setq shuzi (substr wenzi (+ weizhi 1)))   ;取出字符串形式的数字
(setq shishu (atoi shuzi))   ;把数字改为实数


(setq pt1 (getpoint "\n 请选择一个点:"))
(setq pt2 (getpoint pt1 "\n 请选择第二点:"))
(setq n 0)

(while pt2

(setq lll (substr wenzi 1 1))  ;判断第一个字符是什么

;(setq llll (substr wenzi 4 1))  ;判断第四个字符是什么
(cond

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
( (= lll "<")                                           ;
(progn                                                  ;
(setq b (+ shishu bc n))                                ;
(setq c (itoa b))                                       ;
                                                        ;
(setq d (strcat qianzhui c ">"))                        ;
                                                        ;
(setq e (cons 1 d))                                     ;
(command "copy"  ent "" pt1 pt2)                        ;
(setq ent1 (entget (entlast)))                          ;    ;此处为一个判断
(setq txtzh1 (assoc 1 ent1))                            ;
(setq ent1 (subst e txtzh1 ent1))                       ;
(entmod ent1)                                           ;
(princ)                                                 ;
)  ;end progn                                           ;
)  ;end first                                           ;
                                                        ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


                                                             ;如果要加判断的话,请选择这里

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(t                                                      ;
(progn                                                  ;
(setq b (+ shishu bc n))                                ;
(setq c (itoa b))                                       ;
(setq d (strcat qianzhui c))                            ;
(setq e (cons 1 d))                                     ;
(command "copy"  ent "" pt1 pt2)                      ;    ;此处为第二个判断
(setq ent1 (entget (entlast)))                          ;
(setq txtzh1 (assoc 1 ent1))                            ;
(setq ent1 (subst e txtzh1 ent1))                       ;
(entmod ent1)                                           ;
(princ)                                                 ;
)                                                       ;
)                                                       ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


)  ;end cond


(setq n (+ bc n))
(setq pt2 (getpoint pt1 "\n 请选择第二点:"))     ;pt1决定有没有显示线

)    ;end while
(princ)
)    ;end defun

发表于 2008-1-13 13:32 | 显示全部楼层

我不是楼主,哈哈。。。一楼才是楼主。。。

发表于 2008-1-13 13:48 | 显示全部楼层
本帖最后由 作者 于 2008-1-13 14:02:49 编辑

把5楼的代码稍加修改,没有用到vl的函数,所以可以在任意一个CAD版本上使用。。呵呵
但是我还是觉得写的不好,有时间再重写...
  1. (princ "\n>>>请输入dnd,选择多个数字文本! carrot1983 2008-1-13<<<")
  2. (defun c:dnd (/       txt_add ss      slen    i       na      data
  3.        txt     txt_len nub     k       txt_each       num
  4.        num_len n       temp    txt0    n0      expt_num
  5.        faq1    faq2    int
  6.       )
  7.   (setq int (getint "\n不考虑后缀字符的位数<0>:"))
  8.   (if (= nil int)
  9.     (setq int 0)
  10.   ) ;_ end if
  11.   (setq txt_add (getint "\n请输入增值(默认为1):"))
  12.   (if (= nil txt_add)
  13.     (setq txt_add 1)
  14.   ) ;_ end if
  15.   (if (setq ss (ssget '((0 . "*text"))))
  16.     (progn
  17.       (command "._copy" ss "" '(0 0 0) '(0 0 0))
  18.       (setq ss (ssget "p"))
  19.       (princ "指定基点")
  20.       (command "._move" ss"" pause)
  21.       (setq slen (- (sslength ss) 1))
  22.       (setq i 0)
  23.       (while (<= i slen)
  24. (setq na (ssname ss i))
  25. (setq data (entget na))
  26. (setq txt (cdr (assoc '1 data)))
  27. (setq v10 (cdr (assoc '10 data)))
  28. (setq txt_len (strlen txt)) ;9
  29. (setq txt_cut (substr txt 1 (- txt_len int))) ;abc02
  30. (setq txt_len_cut (strlen txt_cut)) ;5
  31. (setq txt_43 (substr txt (- txt_len (1- int)) int)) ;(03)
  32. (setq nub "")
  33. (setq k txt_len_cut)
  34. (while (>= k 1)
  35.    (setq txt_each (substr txt_cut k 1))
  36.    (if (and (>= (ascii txt_each) 48) (<= (ascii txt_each) 57))
  37.      ;取字串中"0~9"中的ascii字符txt_each.
  38.      (progn
  39.        (setq nub (strcat txt_each nub))
  40.        (setq k (1- k))
  41.      )    ;end progn
  42.      (setq k 0)
  43.    )    ;end if
  44. )    ;end while
  45. (if (= nub "")
  46.    (progn
  47.      (princ "\n末尾不是数字")
  48.      (exit)
  49.    ) ;_ end progn
  50. ) ;_ end if
  51. (setq num (atoi nub))  ;nub="02" num=2
  52. (setq num_len (strlen nub)) ;2
  53. ;;;以下是考虑数字串中的零的问题
  54. (setq n 1)
  55. (setq temp 0)
  56. (while (and (<= n num_len) (= temp 0))
  57.    (setq txt0 (atof (substr nub n 1)))
  58.    (if (/= txt0 0)
  59.      (progn
  60.        (setq n0 (1- n))
  61.        (setq temp 1)
  62.      ) ;_ end progn
  63.    ) ;_ end if
  64.    (setq n (1+ n))
  65. )    ;end while
  66. (setq
  67.    expt_num (substr txt_cut 1 (+ n0 (- txt_len num_len int)))
  68. )
  69. (setq faq1 (itoa (+ num txt_add)))
  70. (setq faq2 (strcat expt_num faq1 txt_43))
  71. (setq data (subst (cons 1 faq2) (assoc '1 data) data))
  72. (entmod data)
  73. (setq i (+ i 1))
  74.       )     ;end while
  75.     )
  76.   )
  77.   (prin1)
  78. ) ;_ end defun

评分

参与人数 1明经币 +1 收起 理由
669423907 + 1 很给力!为什么我复制一次,程序就结束了?0.

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-9 20:42 , Processed in 0.179338 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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