AutoCAD顧問
還沒有註冊嗎...即日起免費註冊,所有最完整的AutoCAD討論、教學及資源都在論壇裡喔~

[已解決]請高手們幫我看這個程式哪邊有問題?

上一篇主題 下一篇主題 向下

[已解決]請高手們幫我看這個程式哪邊有問題?

發表 由 蔣秉澔 于 2013-12-31, 05:29

(defun c:CodePage(/ INTXT1 I ENT F ENDATA1 F1 ENTS ENTQU QU I1)
 (setvar "cmdecho" 0)
 (SETQ I (GETSTRING "\n 起始數字 :"))
 (setq ENTS(ssget "_:L" '((2 . "BLOCK1"))))
 (SETQ ENTQU (SSLENGTH ENTS))
 (SETQ QU 0)
 (WHILE (< QU ENTQU)
   (SETQ F 0)
   (SETQ ENT (entget(ssname ENTS QU)))
   (SETQ ENDATA1 (ENTGET (ENTNEXT(CDR(CAR ENT)))))
     (WHILE (< F 20)
(SETQ F1 (CDR (ASSOC 2 ENDATA1)))
(IF  (= F1 "$SH_NO")
 (PROGN
   (IF (< (ATOI I) 10)
     (PROGN
       (SETQ ENDATA1 (SUBST (CONS 1  (STRCAT "00" I)) (ASSOC 1 ENDATA1) ENDATA1))
       (ENTMOD ENDATA1)
);PROGN
     );IF
   (SETQ ENDATA1 (SUBST (CONS 1  (STRCAT "0" I)) (ASSOC 1 ENDATA1) ENDATA1))
   (ENTMOD ENDATA1)
   (IF (> (ATOI I) 99)
     (PROGN
       (SETQ ENDATA1 (SUBST (CONS 1 I) (ASSOC 1 ENDATA1) ENDATA1))
       (ENTMOD ENDATA1)
);PROGN
     );IF
   (SETQ I (ITOA(1+ (ATOI I))))
   );PROGN
 );IF
(SETQ ENDATA1 (ENTGET (ENTNEXT (CDR (CAR ENDATA1)))))
(SETQ F(1+ F))
);WHILE
   (SETQ QU (1+ QU))
   );WHILE
   
(prin1)
)

問題是這樣的:剛寫好後,第一次執行正常,後來關掉CAD程式再打開執行,它總是會直接跳過綠色字那一串,真的搞不懂為什麼? 火冒三丈

附件下載: https://app.box.com/s/7gr8c6wvwuktz9prxedq


蔣秉澔 在 2014-01-15, 00:10 作了第 1 次修改
avatar
蔣秉澔
初級會員
初級會員

文章總數 : 210
年齡 : 40
來自 : 嘉義市
職業 : 大電力系統設計、製程、檢測
愛好 : 電腦相關,出遊踏青
個性 : 待人隨和,對事執著
使用年資 : 8年
使用版本 : 2011 Electrical,2014
積分 : 4
經驗值 : 2777
威望值 : 168
注冊日期 : 2013-08-31
顧問外掛程式 藍鵲661號
男 金牛座 蛇

回頂端 向下

回復: [已解決]請高手們幫我看這個程式哪邊有問題?

發表 由 shenhung 于 2013-12-31, 09:44

方便的話.要請您將.LSP和測試圖檔壓成RAR..附上下載點!!
因為PO的LSP.沒辦法複製. 也無圖檔BLOCK....無法幫忙測試.
目前看起來綠色那一段是因為I值大於10..所以沒執行...有時候.是程式少了部分括號.造成程式執行錯誤.!!
avatar
shenhung
高級會員
高級會員

文章總數 : 238
年齡 : 50
來自 : 新北市
職業 : 塑膠模具設計.AUTOLISP
愛好 : 音樂
個性 : 隨和
使用年資 : 18年
使用版本 : 2010
積分 : 15
經驗值 : 5008
威望值 : 913
注冊日期 : 2009-06-03
男 摩羯座 馬

回頂端 向下

回復: [已解決]請高手們幫我看這個程式哪邊有問題?

發表 由 Atsai 于 2013-12-31, 12:34

樓主於尋找屬性標籤的時依,並未下(-2 . "SEQEND")的判斷,所以只有第一個圖塊是OK的,第二個圖塊就出錯。
於第二個WHILE下判斷就好了,下面是修改後的程式碼,樓主測試看看吧!
代碼:

(defun c:CodePage (/ INTXT1 I ENT F ENDATA1 F1 ENTS ENTQU QU I1)
  (setvar "cmdecho" 0)
  (SETQ I (GETSTRING "\n 起始數字 :"))
  (setq ENTS (ssget "_:L" '((2 . "BLOCK1"))))
  (SETQ ENTQU (SSLENGTH ENTS))
  (SETQ QU 0)
  (WHILE (< QU ENTQU)
    (SETQ F 0)
    (SETQ ENT (entget (ssname ENTS QU)))
    (SETQ ENDATA1 (ENTGET (ENTNEXT (CDR (CAR ENT)))))
    (WHILE (AND (< F 20) (/= (CDR (ASSOC 0 ENDATA1)) "SEQEND"))
      (SETQ F1 (CDR (ASSOC 2 ENDATA1)))
      (IF (= F1 "$SH_NO")
   (PROGN
     (IF (< (ATOI I) 10)
       (PROGN
         (SETQ ENDATA1 (SUBST (CONS 1 (STRCAT "00" I)) (ASSOC 1 ENDATA1) ENDATA1))
         (ENTMOD ENDATA1)
       ) ;PROGN
     ) ;IF
     (SETQ ENDATA1 (SUBST (CONS 1 (STRCAT "0" I)) (ASSOC 1 ENDATA1) ENDATA1))
     (ENTMOD ENDATA1)
     (IF (> (ATOI I) 99)
       (PROGN
         (SETQ ENDATA1 (SUBST (CONS 1 I) (ASSOC 1 ENDATA1) ENDATA1))
         (ENTMOD ENDATA1)
       ) ;PROGN
     ) ;IF
     (SETQ I (ITOA (1+ (ATOI I))))
   ) ;PROGN
      ) ;IF
      (SETQ ENDATA1 (ENTGET (ENTNEXT (CDR (CAR ENDATA1)))))
      (SETQ F (1+ F))
    ) ;WHILE
    (SETQ QU (1+ QU))
  ) ;WHILE

  (prin1)
)

附件下載: https://app.box.com/s/1t3ym7q3itjh1yqss1wr
avatar
Atsai
中級會員
中級會員

文章總數 : 115
年齡 : 42
來自 : 台中
職業 : 工程
愛好 : 看漫畫
個性 : 樂天
使用年資 : 10
使用版本 : 2010
AutoCAD基礎篇等級 : 10星級
積分 : 7
經驗值 : 2906
威望值 : 337
注冊日期 : 2012-04-06
男 金牛座 兔

回頂端 向下

回復: [已解決]請高手們幫我看這個程式哪邊有問題?

發表 由 蔣秉澔 于 2013-12-31, 15:45

謝謝兩位費心的幫小弟看,我剛剛陪家人跨年順便再試看看,結果是我其中2條式子放錯地方了,呵呵!!
問題解決囉!!
avatar
蔣秉澔
初級會員
初級會員

文章總數 : 210
年齡 : 40
來自 : 嘉義市
職業 : 大電力系統設計、製程、檢測
愛好 : 電腦相關,出遊踏青
個性 : 待人隨和,對事執著
使用年資 : 8年
使用版本 : 2011 Electrical,2014
積分 : 4
經驗值 : 2777
威望值 : 168
注冊日期 : 2013-08-31
顧問外掛程式 藍鵲661號
男 金牛座 蛇

回頂端 向下

回復: [已解決]請高手們幫我看這個程式哪邊有問題?

發表 由 djh1006 于 2014-01-14, 13:07

熱心提醒,請版主蔣秉澔用編輯功能,將【討論】改成【已解決】
avatar
djh1006
中級會員
中級會員

文章總數 : 156
年齡 : 46
來自 : 彰化縣員林鎮中山路二段369巷二弄15-14號
職業 : 沖壓模具設計工程師
愛好 : UG,SOLIDWORKS,AUTOCAD 2D,autolisp
個性 : 內向偏外
使用年資 : 18以上
使用版本 : 2014
積分 : 6
經驗值 : 3407
威望值 : 294
注冊日期 : 2011-06-16
男 獅子座 豬

回頂端 向下

上一篇主題 下一篇主題 回頂端


 
這個論壇的權限:
無法 在這個版面回復文章