小男人漏水 发表于 2018-1-12 19:09:59

今天闹鬼了。各位帮忙看一下。

(setq N0 (strlen TextString));获取图号尾数
(setq N1 (- N0 1))
(setq N2 (substr TextString N1 N0))
(setq N3 (substr TextString 1 (- N0 2)))
(setq N4 (+ (atoi N2) 1))
位数加1的这个开始没有问题。用了一会突然出现了
N4的值变成04了。一开始一直是4.
刚开始学,郁闷啊,求各位指点一下。

Andyhon 发表于 2018-1-12 21:30:10

(strlen TextString) 获取的是字串长度
与图号尾数有何关联?

TextString的含值是什么?

小男人漏水 发表于 2018-1-13 08:18:00

本帖最后由 小男人漏水 于 2018-1-13 08:20 编辑

Andyhon 发表于 2018-1-12 21:30
(strlen TextString) 获取的是字串长度
与图号尾数有何关联?

长老。这个是程序一段。 Textstring 是已经取得图框内的图号的长度。例如:HIE-A170523-0001-01长度是19
,这段的目的是把01提出来转成数字+1,然后与HIE-A170523-0001进行合并。
现在出现的问题是 N4的值有时候是02 有时候是2 ,所以比较郁闷。
不知道是不是跟其设置有关。
(Defun C:tt ()
(setq en0 (car (entsel)))
(setq tkss(ssadd) tkss(ssadd en0 tkss))
;(setqTKSS (ssget;"x" X为全选
      ;'((-4 . "<or") (2 . "a4") (2 . "a3") (-4 . "or>")))
;;此处请选有属性定义的图块
(setq vn0 (vlax-ename->vla-object en0))
(setq lstVar (vla-getattributes vn0))
(setq lstAttrs (vlax-safeArray->list (vlax-variant-value lstVar)))
(setq TextString nil)
(foreach attrlstAttrs
    (setq TagString (vla-get-TagString attr))
    (if(equal TagString "DWGNO");此处为你想要的元素
      (setq TextString (vla-get-TextString attr))
    )
)
(if TextString
    (princ (strcat "The content of length = " TextString))
    (princ "没有找到图号 ")
)
;尾数+1程序
(setq N0 (strlen TextString));获取图号尾数
(setq N1 (- N0 1))
(setq N2 (substr TextString N1 N0))
(setq N3 (substr TextString 1 (- N0 2)))
(setq N4 (+ (atoi N2) 1))
(IF (<= N4 9)
    (setq N4 (strcat (itoa 0) (itoa N4))))   
(IF (> N4 9)
    (setq N4 (itoa N4)))   
(setq CM-NEW (strcat N3 N4))
;尾数+1程序
(setq nn (SSLENGTH TKSS))
(WHILE (< 0 (SSLENGTH TKSS))
    (SETQ TK0 (SSNAME TKSS 0))

    (PROGN (SETQ TK0 (VLAX-ENAME->VLA-OBJECT TK0))
   (SETQ TK0ATTS (VLAX-SAFEARRAY->LIST
         (VLAX-VARIANT-VALUE
         (VLA-GETATTRIBUTES TK0)
         )
       )
   )
   (FOREACH ATTTK0ATTS
       (PROGN (IF(= "DWGNO" (VLA-GET-TAGSTRING ATT))
          (SETQ FATT ATT)
      )
      (IF(= "零件图号" (VLA-GET-TAGSTRING ATT))
          (SETQ FATT1 ATT)
      )
      
       )
   )
   (VLAX-PUT-PROPERTY FATT1 'TEXTSTRING CM-NEW)
         (VLAX-PUT-PROPERTY FATT 'TEXTSTRING CM-NEW)
    )

    (SSDEL (SSNAME TKSS 0) TKSS)
)
(princ (strcat "修改成功!共修改" (itoa nn) "个图框!"))
(prin1)
)

Andyhon 发表于 2018-1-13 09:19:41

本帖最后由 Andyhon 于 2018-1-13 09:21 编辑

Command: (setq TextString "HIE-A170523-0001-01")
"HIE-A170523-0001-01"

Command: (progn
(_>   ;尾数+1程序
(_>   (setq N0 (strlen TextString));获取图号尾数
(_>   (setq N1 (- N0 1))
(_>   (setq N2 (substr TextString N1 N0))
(_>   (setq N3 (substr TextString 1 (- N0 2)))
(_>   (setq N4 (+ (atoi N2) 1))
(_> )
2

Command: !N0
19

Command: !N1
18

Command: !N2
"01"

Command: !N3
"HIE-A170523-0001-"

Command: !N4
2

Command: (progn
(_>   ;尾数+1程序
(_>   (setq N0 (strlen TextString));获取图号字串长度
(_>   (setq N1 (1- N0))
(_>   (setq N2 (substr TextString N1))
(_>   (setq N3 (substr TextString 1 (- N0 2)))
(_>   (setq N4 (+ (atoi N2) 1))
(_> )
2

Command: !N1
18

Command: !N2
"01"

Command: (if (> N4 9)
(_>   (setq N4 (itoa N4))
(_>   (setq N4 (strcat "0" (itoa N4)))
(_> )
"02"

您的注释容易误(导)解

(setq TextString "HIE-A170523-0001-01")
(progn
;尾数+1程序
(setq N0 (strlen TextString));获取图号尾数
(setq N1 (- N0 1))
(setq N2 (substr TextString N1 N0))
(setq N3 (substr TextString 1 (- N0 2)))
(setq N4 (+ (atoi N2) 1))
)


(progn
;尾数+1程序
(setq N0 (strlen TextString));获取图号字串长度
(setq N1 (1- N0))
(setq N2 (substr TextString N1))
(setq N3 (substr TextString 1 (- N0 2)))
(setq N4 (1+ (atoi N2)))
)

Ref:
http://bbs.mjtd.com/thread-107901-1-1.html


(IF (<= N4 9)
    (setq N4 (strcat (itoa 0) (itoa N4))))   
(IF (> N4 9)
    (setq N4 (itoa N4)))

(if (> N4 9)
(setq N4 (itoa N4))
(setq N4 (strcat "0" (itoa N4)))
)   

小男人漏水 发表于 2018-1-15 10:02:45

Andyhon 发表于 2018-1-13 09:19
Command: (setq TextString "HIE-A170523-0001-01")
"HIE-A170523-0001-01"



感谢长老。我知道自己错在哪里了。谢谢!哎周五觉得不能做事。脑子容易变浆糊。哈哈感谢!
页: [1]
查看完整版本: 今天闹鬼了。各位帮忙看一下。