乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 29|回复: 15

[编程交流] 根据列表输入

[复制链接]

73

主题

261

帖子

195

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
375
发表于 2022-7-5 15:08:31 | 显示全部楼层 |阅读模式
你好
我使用以下lisp来增加属性。
效果很好,但是否可以根据列表执行此操作?
我想要的是:
从1001开始,然后是1002、1003、1004、1005和1006。
然后在1006之后继续1101到1112,然后继续1201到1212
以此类推
1301至1312
1401至1412
1501至1512年
1601年至1612年
1701至1712
1801年至1812年
 
 
  1. ;==================================================
  2. (defun c:INCATT
  3.    ( / f str i f tag num pre post OOv
  4.       
  5. ;        *StartStr121007
  6. ;        *IncreaseN121007
  7.       
  8.        HUE:DivideNum
  9.        HUE:memoVar
  10.        HUE:stringsubst
  11.        HUE:StringCal
  12.        HUE:start
  13.        HUE:end
  14.       
  15.        _divideStr
  16.       
  17.    )
  18.    ;-------------------------------------------------------------------------
  19.    ; Sub Function
  20.    ;-------------------------------------------------------------------------
  21.    (defun HUE:DivideNum ( str / lst s m v1 v2 i j c _NumP _Cal)
  22.        (defun _NumP ( x ) (<= 48 x 57))
  23.        (defun _Cal ( ty v )
  24.            (set v (cons (vl-list->string (reverse (eval ty))) (eval v)))
  25.            (set ty nil)
  26.        )
  27.       
  28.        (setq lst (vl-string->list str) i -1 j -1)
  29.       
  30.        (repeat (length lst)
  31.            (setq c (nth (setq i (+ i 1)) lst))
  32.            
  33.            (cond
  34.                (    (_NumP c)
  35.                    (setq s (cons c s) ) (cond ( m (_Cal 'm 'v1) (setq j (+ 1 j)))))
  36.                
  37.                (    (and (= c 46) (> i 0) (_NumP (nth (- i 1) lst)) (_NumP (nth (+ i 1) lst)))
  38.                    (setq s (cons c s))
  39.                )
  40.                (t  (setq m (cons c m))
  41.                    (cond ( s (_Cal 's 'v1) (setq v2 (cons (setq j (+ 1 j)) v2))))
  42.                )
  43.            )
  44.        )
  45.        (cond
  46.            ( m (_Cal 'm 'v1))
  47.            ( t (_Cal 's 'v1) (setq v2 (cons (setq j (+ 1 j)) v2)))
  48.        ) (list (reverse v1) (reverse v2))
  49.    )
  50.    
  51.    ;-------------------------------------------------------------------------
  52.    ; Sub Function
  53.    ;-------------------------------------------------------------------------
  54.    (defun HUE:memoVar ( va f m s / v )
  55.        (setq v (if (member (eval va) '(nil "")) s  (eval va)))
  56.        (mapcar 'princ (list "\n" m " <" v "> : "))
  57.        (set va ( f ))
  58.        (if (member(eval va) '(nil "")) (set va v)) (eval va)
  59.    )
  60.    
  61.    ;-------------------------------------------------------------------------
  62.    ; Sub Function
  63.    ;-------------------------------------------------------------------------
  64.    (defun HUE:stringsubst ( new old str / l i ) (setq l (strlen new) i 0)
  65.        (while (setq i (vl-string-search old str i))
  66.            (setq str (vl-string-subst new old str i) i (+ i l))
  67.        ) str
  68.    )
  69.    
  70.    ;-------------------------------------------------------------------------
  71.    ; Sub Function
  72.    ;-------------------------------------------------------------------------
  73.    (defun HUE:StringCal ( str f n / _GetPP data1 data2 num i DIMZIN )
  74.        (defun _GetPP ( str / lst l post pre flag )
  75.            (setq lst  (vl-remove  45 (vl-string->list str))
  76.                  post (if (setq l (member 46 lst)) (- (length l) 1) 0)
  77.                  pre  (if (setq l (member 46 (reverse lst))) (- (length l) 1) (length lst))
  78.                  flag (minusp (atof str))
  79.            ) (list pre post flag)
  80.        )
  81.       
  82.        (setq DIMZIN (getvar 'DIMZIN))
  83.       
  84.        (setvar 'DIMZIN 0)
  85.        (setq data1 (_GetPP str)
  86.              num   (vl-string->list (rtos (f (atof str) n) 2 (cadr data1)))
  87.              data2 (_GetPP (vl-list->string num))
  88.              num   (vl-remove 45 num)
  89.        )
  90.        (setvar 'DIMZIN DIMZIN)
  91.        (if (< 0 (setq i (- (car  data1) (car  data2))))
  92.            (repeat i (setq num (cons 48 num)))
  93.        )
  94.        (if (< 0 (setq i (- (cadr data1) (cadr data2))))
  95.            (repeat i (setq num (append num '(48))))
  96.        )
  97.        (if (caddr data2) (setq num (cons 45 num)))
  98.        (vl-list->string num)
  99.    )
  100.    
  101.    ;-------------------------------------------------------------------------
  102.    ; Sub Function
  103.    ;-------------------------------------------------------------------------
  104.    (defun HUE:start( lst )
  105.        (vla-startundomark (HUE:end nil))
  106.        (list lst (mapcar 'getvar lst))
  107.    )
  108.    
  109.    ;-------------------------------------------------------------------------
  110.    ; Sub Function
  111.    ;-------------------------------------------------------------------------
  112.    (defun HUE:end ( d / doc )
  113.        (setq doc (vla-get-activedocument (vlax-get-acad-object)))
  114.        (and (cadr d) (mapcar 'setvar (car d) (cadr d)))
  115.        (if (= 8 (logand 8 (getvar 'UNDOCTL))) (vla-endundomark doc)) doc
  116.    )
  117.    
  118.    ;-------------------------------------------------------------------------
  119.    ; Sub Function
  120.    ;-------------------------------------------------------------------------
  121.    (defun _divideStr ( str / data i j k pre post )
  122.        (setq data (HUE:DivideNum str)
  123.              k    (last (cadr data))
  124.              j    0
  125.              pre  ""
  126.              post ""
  127.        )
  128.       
  129.        (foreach s (car data)
  130.            (cond
  131.                (    (< j k) (setq pre (strcat pre  s)))
  132.                (    (> j k) (setq post(strcat post s)))
  133.                (    (= j k) (setq i s))
  134.            )
  135.            (setq j (+ 1 j))
  136.        )
  137.        (list pre i post)
  138.    )
  139.    
  140.    ;-------------------------------------------------------------------------
  141.    ; Error Function
  142.    ;-------------------------------------------------------------------------
  143.    (defun *error* (s)
  144.        (if OOv (HUE:End OOv)) (princ s)
  145.    )
  146.    ;-----------------------------------------------------------------------------------
  147.    ; Main Function                                                                     
  148.    ;-----------------------------------------------------------------------------------
  149.    (setq str  (HUE:MemoVar '*StartStr121007  getstring "StartString  " "100")
  150.          i    1
  151.          OOv  (HUE:Start '(DIMZIN))
  152.    )
  153.    
  154.    (and
  155.        (vl-string-search "," str)
  156.        (setq str (HUE:StringSubst "." "," str)  f t)
  157.    )
  158.    
  159.    (mapcar 'set '(pre num post) (_DivideStr str))
  160.    (setq tag  "TEXT1"
  161.          num  (HUE:StringCal num - i)
  162.    )
  163.    (setvar 'ERRNO 0)
  164.    (setvar 'DIMZIN
  165.    (while (= 0 (getvar 'ERRNO))
  166.        (and
  167.            (setq o (ssget "_+.:E:S:L" '((0 . "INSERT") (66 . 1))))
  168.    ;(C:PUTA);------------------------------------------------------put locatiecode-----------------------------------
  169.            (vl-some
  170.                '(lambda ( att )
  171.                    (if (= tag (vla-get-tagstring att))
  172.                                  (progn
  173.                            (setq num (HUE:StringCal num + i)
  174.                                  str (strcat pre num post)
  175.                            )
  176.         (if f (setq str (HUE:StringSubst "," "." str)))
  177.                            (vla-put-textstring att str)
  178.                        )
  179.                    )
  180.                ) (vlax-invoke (vlax-ename->vla-object (ssname o 0)) 'getattributes)
  181.            )
  182.        )
  183.    )
  184.    (HUE:End OOv)
  185.    (princ)
  186. )(vl-load-com)

 
提前谢谢你
PmxCAD
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 15:13:16 | 显示全部楼层
没有理由为什么不使用列表或文本文件等没有代码只是想法。
 
 
  1. ((1001 1 5)(1201 1 12)(1300 2 4))
  2. (startnumber inc howmany)
回复

使用道具 举报

5

主题

956

帖子

963

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 15:18:17 | 显示全部楼层
 
极限0~12?
  1. (defun lim12 (x / n)
  2. (setq n (rem x 100))
  3. (cond        ((if (zerop n)
  4.    (- x n)
  5.    )
  6. )
  7. ((if (< n 13)
  8.    x
  9.    (+ 100 (- x n))
  10.    )
  11. )
  12. )
  13. )

 
回复

使用道具 举报

73

主题

261

帖子

195

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
375
发表于 2022-7-5 15:21:27 | 显示全部楼层
我一直在胡闹,想列个清单。
我做了以下几点。
 
  1. (defun c:test1 ()
  2. (setq lst '(1001 1002 1003 1004 1005 1006
  3.    1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112
  4.    1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212
  5.    1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312
  6.    1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412
  7.    1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512
  8.    1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612
  9.    1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712
  10.    1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812
  11. )
  12. )
  13. (princ lst)
  14. )

 
需要大量的打字,它没有你的先进,但也很有效。
 
 
我也一直在玩比格尔的例子。
 
  1. (defun c:test2 ()
  2. (setq lst '((1001 1 6)(1201 1 12)(1301 1 12)(1401 1 12)(1501 1 12)(1601 1 12)(1701 1 12)(1801 1 12))
  3. )
  4. )

 
 
但我真的不知道如何在INCATT lisp中应用这一点。
有人能帮我吗?
 
提前感谢,
 
PmxCAD
回复

使用道具 举报

58

主题

3353

帖子

33

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1761
发表于 2022-7-5 15:28:10 | 显示全部楼层
下面是一个简单的示例:
  1. (setq n 1300)
  2. (while (getpoint) (repeat 12 (print (setq n (1+ n)))) (setq n (+ 88 n)))
回复

使用道具 举报

73

主题

261

帖子

195

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
375
发表于 2022-7-5 15:32:00 | 显示全部楼层
嗯,这对我来说并不是那么简单。但我认为这是一个计数器。从1301年到1312年开始。
(1+n)是计数器,(+100 n)将值增加100,(重复12)重复12次。
我设法摆脱了这一点,但我不理解(getpoint)和打印。
回复

使用道具 举报

73

主题

261

帖子

195

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
375
发表于 2022-7-5 15:34:12 | 显示全部楼层
我想我应该用(nth 0 lst)来阅读我的示例列表
(nth 0(nth 0 lst))来阅读BIGAL的例子,对吗?
回复

使用道具 举报

5

主题

956

帖子

963

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 15:38:09 | 显示全部楼层
康德是你的朋友
 
从#3后修改
  1. (defun[b] lim[/b] (x i)
  2. (setq n (rem x 100))
  3. ([color="blue"]cond[/color]        ((if (zerop n)
  4.    (- x n)
  5.    )
  6. )
  7. ((if (<= n i)
  8.    x
  9.    (1+(+ 100 (- x n)))
  10.    )
  11. )
  12. )
  13. )
  14. (defun c:test (/ x n)
  15. (setq x [color="red"]1001[/color])
  16. (while x
  17.    (if        (setq x        (cond ((getint (strcat "\n[Enter] to continue or input number < " (itoa x) " > : ")))
  18.                   (x)
  19.                   
  20.             )
  21.       n        ([color="blue"]cond[/color] ((<= [color="red"]1001 [/color]x [color="red"]1006[/color]) (lim x [color="red"]6[/color])) [color="green"]; count from 1001 to 1006 only [/color]
  22.               ((< [color="red"]1006[/color] x [color="red"]1101[/color]) 1101) [color="green"]; if x > 1006 jumps to 1101[/color]
  23.               ((<= [color="red"]1101[/color] x[color="red"] 1812[/color]) (lim x [color="red"]12[/color])) [color="green"]; from 1101 to 1812 count every 100s to 12 [/color]
  24.               )
  25.       )
  26.      (progn (princ (setq x n) ) (setq x (1+ x)))
  27.      (setq x nil)
  28.      )
  29.    )
  30. (princ)
  31. )

 
 
 
  1. (defun lim# (x p)
  2. (cond ((<= 1001 x 1006) ([color="blue"]lim[/color] x 6))
  3.               ((< 1006 x 1101) 1101)
  4.               ((<= 1101 x 1812) ([color="blue"]lim[/color] x 12))
  5.                      (t (if p x))
  6.               )
  7. )
回复

使用道具 举报

73

主题

261

帖子

195

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
375
发表于 2022-7-5 15:40:56 | 显示全部楼层
嗨,比格尔,我不会成功的,我不知道我应该用哪个列表。(红色顶部)以及放置位置。
我必须删除这一行并把你的代码放在那里吗?(红色)
 
 
  1. (defun foo (f)
  2. (foreach x '([color="purple"]999 1000 1001 1002 1005 1006 1007 1199 1300 1301 1311 1312 1313 1399 1400 1413 1699 1700 1701 1711 1712 1713 1714 1800 1812 1813 1814 1900[/color])
  3. (princ (apply        'strcat
  4.         (mapcar        'vl-princ-to-string
  5.                 (list "\n" x
  6.                       " -> "
  7.                      (eval f)
  8.                         )
  9.                       )
  10.                 )
  11.         )
  12. )
  13. (textscr)
  14. (princ)
  15. )
  16. (defun c:test2 nil
  17. (foo '(lim# x [color="blue"][b]NIL[/b][/color]))) [color="green"];limit range 1001 to 1812[/color]
  18. (defun c:test3 nil
  19. (foo '(lim# x [b][color="blue"]T[/color][/b])))[color="green"] ; after 1812 ,1813 etc.. as normal[/color]
回复

使用道具 举报

5

主题

956

帖子

963

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 15:48:27 | 显示全部楼层
这将是一个好主意,张贴一个dwg它将更有意义的代码实际上正在做什么。我想弄清楚这一切,但有点不知所措。
 
代码有这样的内容(setq str(HUE:MemoVar'*StartStr121007 getstring“StartString”“100”),我不知道您提供的值是什么。
 
编写类似这样的代码
  1. I think this is the line to play with not tested.
  2. (setq str  (HUE:MemoVar '*StartStr121007  getstring "StartString  " "100")
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-14 21:04 , Processed in 1.121462 second(s), 73 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表