[討論]lisp迴圈 跟if問題
3 posters
AutoCAD顧問 :: 技術(發言等級:一般會員) :: :: 進階討論
第1頁(共1頁)
[討論]lisp迴圈 跟if問題
- 代碼:
(defun c:CCCC()
(setvar "cmdecho" 0)
(SETQ TXT3 (GETSTRING "輸入編號"))
(SETQ TXT4 (atof TXT3))
(if (>= TXT4 10)
(progn
(setq en (entsel "1文字"))
(WHILE en
(setq en_data (entget (car en)))
(setq en_txt (cdr (assoc 1 en_data)))
(setq oldt (assoc 1 en_data))
(SETQ NEWTX (STRCAT "料號:" "0" TXT3 ))
(setq newt (cons 1 NEWTX))
(setq en2_data (subst newt oldt en_data))
(entmod en2_data)
(SETQ ATT (atoi TXT3))
(SETQ TXT3 (+ ATT 1))
(SETQ TXT3 (itoa TXT3))
(setq en (entsel "2文字"))
)
)
(progn
(setq en (entsel "1文字"))
(WHILE en
(setq en_data (entget (car en)))
(setq en_txt (cdr (assoc 1 en_data)))
(setq oldt (assoc 1 en_data))
(SETQ NEWTX (STRCAT "料號:" "00" TXT3 ))
(setq newt (cons 1 NEWTX))
(setq en2_data (subst newt oldt en_data))
(entmod en2_data)
(SETQ ATT (atoi TXT3))
(SETQ TXT3 (+ ATT 1))
(SETQ TXT3 (itoa TXT3))
(setq en (entsel "2文字"))
)
)
)
)
(prin1)
目前所寫的是 輸入一個編號 然後點文字 自動變更文字內容 變成 料號:001 > 點下一個自動+1 料號:002 之類的
但我想改成 一直點 點下去 點到大於10時 會變成 料號:010
請問有甚麼辦法可以幫我解決此問題!?
目前只是分成兩個 一開始
輸入的數字大於10 前面自動+個料號:0
小於10 前面自動+個料號:00
是否可以在迴圈時 +1+1 +到大於10 時 從迴圈跳出來 跳到 小於10的那邊程式
求lisp高手幫忙解惑
as920029as- 一般會員
- 文章總數 : 110
年齡 : 33
來自 : 台南市
職業 : 繪圖員
愛好 : 電腦遊戲
個性 : 開朗
使用年資 : 3年
使用版本 : 2010
經驗值 : 5184
威望值 : 47
注冊日期 : 2012-05-06
回復: [討論]lisp迴圈 跟if問題
as920029as 寫到:
- 代碼:
(defun c:CCCC()
(setvar "cmdecho" 0)
(SETQ TXT3 (GETSTRING "輸入編號"))
(SETQ TXT4 (atof TXT3))
(if (>= TXT4 10)
(progn
(setq en (entsel "1文字"))
(WHILE en
(setq en_data (entget (car en)))
(setq en_txt (cdr (assoc 1 en_data)))
(setq oldt (assoc 1 en_data))
(SETQ NEWTX (STRCAT "料號:" "0" TXT3 ))
(setq newt (cons 1 NEWTX))
(setq en2_data (subst newt oldt en_data))
(entmod en2_data)
(SETQ ATT (atoi TXT3))
(SETQ TXT3 (+ ATT 1))
(SETQ TXT3 (itoa TXT3))
(setq en (entsel "2文字"))
)
)
(progn
(setq en (entsel "1文字"))
(WHILE en
(setq en_data (entget (car en)))
(setq en_txt (cdr (assoc 1 en_data)))
(setq oldt (assoc 1 en_data))
(SETQ NEWTX (STRCAT "料號:" "00" TXT3 ))
(setq newt (cons 1 NEWTX))
(setq en2_data (subst newt oldt en_data))
(entmod en2_data)
(SETQ ATT (atoi TXT3))
(SETQ TXT3 (+ ATT 1))
(SETQ TXT3 (itoa TXT3))
(setq en (entsel "2文字"))
)
)
)
)
(prin1)
目前所寫的是 輸入一個編號 然後點文字 自動變更文字內容 變成 料號:001 > 點下一個自動+1 料號:002 之類的
但我想改成 一直點 點下去 點到大於10時 會變成 料號:010
請問有甚麼辦法可以幫我解決此問題!?
目前只是分成兩個 一開始
輸入的數字大於10 前面自動+個料號:0
小於10 前面自動+個料號:00
是否可以在迴圈時 +1+1 +到大於10 時 從迴圈跳出來 跳到 小於10的那邊程式
求lisp高手幫忙解惑
(setvar "cmdecho" 0)
(SETQ TXT3 (GETSTRING "輸入編號"))
(SETQ TXT4 (atof TXT3))
(setq en (entsel "1文字"))
(WHILE en
(if (>= TXT4 10)
(執行程式1)
(執行程式2)
);結束IF
(setq en (entsel "1文字")
); 結束WHILE
)
架構大概就這樣囉 ~~~ 試試吧
阿希- 高級會員
- 文章總數 : 348
年齡 : 43
來自 : 台北
職業 : 水電設計
愛好 : autolisp
個性 : 和平主義者
使用年資 : 5
使用版本 : 2008
積分 : 19
經驗值 : 6783
威望值 : 226
發帖精華 : 1
注冊日期 : 2008-09-22
回復: [討論]lisp迴圈 跟if問題
一個迴圈就行了.
判斷 編號1-10的字串數. 1個就+00 .2個就+0
迴圈最後.再判斷.是不是大於10.是的話.就將編號再設回1
判斷 編號1-10的字串數. 1個就+00 .2個就+0
迴圈最後.再判斷.是不是大於10.是的話.就將編號再設回1
- 代碼:
(defun c:cccc()
(setvar "cmdecho" 0)
(SETQ TXT3 (GETSTRING "輸入編號:"))
(setq en (entsel "\n1文字"))
(WHILE en
(setq en_data (entget (car en)))
(setq en_txt (cdr (assoc 1 en_data)))
(setq oldt (assoc 1 en_data))
(cond ((= (strlen txt3) 1)
(SETQ NEWTX (STRCAT "料號:00" TXT3 ))
)
((= (strlen txt3) 2)
(SETQ NEWTX (STRCAT "料號:0" TXT3 ))
)
)
(setq newt (cons 1 NEWTX))
(setq en2_data (subst newt oldt en_data))
(entmod en2_data)
(SETQ ATT (atoi TXT3))
(SETQ TXT3 (+ ATT 1))
(if (= txt3 11) (setq txt3 1)) ;編號=11 編號設為1
(SETQ TXT3 (itoa TXT3))
(setq en (entsel "\n2文字"))
)
)
shenhung- 高級會員
- 文章總數 : 281
年齡 : 57
來自 : 新北市
職業 : 塑膠模具設計.AUTOLISP
愛好 : 音樂
個性 : 隨和
使用年資 : 18年
使用版本 : 2010
積分 : 15
經驗值 : 8036
威望值 : 1191
注冊日期 : 2009-06-03
回復: [討論]lisp迴圈 跟if問題
感謝大大幫忙
我有空再試試看
最近比較忙沒時間碰lisp
我有空再試試看
最近比較忙沒時間碰lisp
as920029as- 一般會員
- 文章總數 : 110
年齡 : 33
來自 : 台南市
職業 : 繪圖員
愛好 : 電腦遊戲
個性 : 開朗
使用年資 : 3年
使用版本 : 2010
經驗值 : 5184
威望值 : 47
注冊日期 : 2012-05-06
回復: [討論]lisp迴圈 跟if問題
這程式有點小問題
但小弟不知道如何解決....
因為很多寫法老時說 看不是很懂
問題 出在 假如輸入1 會變成 001
但一直點下去 +1 +1....
+到10 要變成11時 又會跳回001
但我要的是 11時 會變成 011然後繼續+1+1
012~013這樣慢慢下去
想順便問一下(cond 的用法
是否有教學或多一點範例..可提供
但小弟不知道如何解決....
因為很多寫法老時說 看不是很懂
問題 出在 假如輸入1 會變成 001
但一直點下去 +1 +1....
+到10 要變成11時 又會跳回001
但我要的是 11時 會變成 011然後繼續+1+1
012~013這樣慢慢下去
想順便問一下(cond 的用法
是否有教學或多一點範例..可提供
as920029as- 一般會員
- 文章總數 : 110
年齡 : 33
來自 : 台南市
職業 : 繪圖員
愛好 : 電腦遊戲
個性 : 開朗
使用年資 : 3年
使用版本 : 2010
經驗值 : 5184
威望值 : 47
注冊日期 : 2012-05-06
回復: [討論]lisp迴圈 跟if問題
那我會錯意了...請將這一行.取消就行了.. (if (= txt3 11) (setq txt3 1))
cond 是多個條件判斷式.
(cond ((= (strlen txt3) 1) ;字串長度=1
(SETQ NEWTX (STRCAT "料號:00" TXT3 ))
)
((= (strlen txt3) 2) ;字串長度=2
(SETQ NEWTX (STRCAT "料號:0" TXT3 ))
)
((= (strlen txt3) 3) ;字串長度=3
(SETQ NEWTX (STRCAT "料號:" TXT3 ))
)
)
只要上述.3個條件.某一個成立.就會執行 ()內的程式.
當然也可以超過3個以上..都沒問題.
cond 是多個條件判斷式.
(cond ((= (strlen txt3) 1) ;字串長度=1
(SETQ NEWTX (STRCAT "料號:00" TXT3 ))
)
((= (strlen txt3) 2) ;字串長度=2
(SETQ NEWTX (STRCAT "料號:0" TXT3 ))
)
((= (strlen txt3) 3) ;字串長度=3
(SETQ NEWTX (STRCAT "料號:" TXT3 ))
)
)
只要上述.3個條件.某一個成立.就會執行 ()內的程式.
當然也可以超過3個以上..都沒問題.
shenhung- 高級會員
- 文章總數 : 281
年齡 : 57
來自 : 新北市
職業 : 塑膠模具設計.AUTOLISP
愛好 : 音樂
個性 : 隨和
使用年資 : 18年
使用版本 : 2010
積分 : 15
經驗值 : 8036
威望值 : 1191
注冊日期 : 2009-06-03
回復: [討論]lisp迴圈 跟if問題
感謝大大講解
我試著用這方式寫期他程式看看
我試著用這方式寫期他程式看看
as920029as- 一般會員
- 文章總數 : 110
年齡 : 33
來自 : 台南市
職業 : 繪圖員
愛好 : 電腦遊戲
個性 : 開朗
使用年資 : 3年
使用版本 : 2010
經驗值 : 5184
威望值 : 47
注冊日期 : 2012-05-06
AutoCAD顧問 :: 技術(發言等級:一般會員) :: :: 進階討論
第1頁(共1頁)
這個論壇的權限:
您 無法 在這個版面回復文章