AutoCAD顧問
還沒有註冊嗎...即日起免費註冊,所有最完整的AutoCAD討論、教學及資源都在論壇裡喔~
AutoCAD顧問
Would you like to react to this message? Create an account in a few clicks or log in to continue.
[討論]lisp迴圈 跟if問題 Io15010 [討論]lisp迴圈 跟if問題 2020-310 [討論]lisp迴圈 跟if問題 Oiu15010 [討論]lisp迴圈 跟if問題 2020-211 [討論]lisp迴圈 跟if問題 Oo-2-110 [討論]lisp迴圈 跟if問題 BPl3tjj

[討論]lisp迴圈 跟if問題

向下

[討論]lisp迴圈 跟if問題 Empty [討論]lisp迴圈 跟if問題

發表 由 as920029as 于 2015-02-05, 11:01

代碼:
(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
as920029as
一般會員
一般會員

文章總數 : 86
年齡 : 29
來自 : 台南市
職業 : 繪圖員
愛好 : 電腦遊戲
個性 : 開朗
使用年資 : 3年
使用版本 : 2010
經驗值 : 3655
威望值 : 44
注冊日期 : 2012-05-06
男 白羊座 羊

回頂端 向下

[討論]lisp迴圈 跟if問題 Empty 回復: [討論]lisp迴圈 跟if問題

發表 由 阿希 于 2015-02-06, 12:38

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
)

架構大概就這樣囉 ~~~ 試試吧

avatar
阿希
高級會員
高級會員

文章總數 : 335
年齡 : 39
來自 : 台北
職業 : 水電設計
愛好 : autolisp
個性 : 和平主義者
使用年資 : 5
使用版本 : 2008
積分 : 19
經驗值 : 5293
威望值 : 205
發帖精華 : 1
注冊日期 : 2008-09-22
男 摩羯座 猴

回頂端 向下

[討論]lisp迴圈 跟if問題 Empty 回復: [討論]lisp迴圈 跟if問題

發表 由 shenhung 于 2015-02-07, 08:13

一個迴圈就行了.
判斷 編號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
shenhung
高級會員
高級會員

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

回頂端 向下

[討論]lisp迴圈 跟if問題 Empty 回復: [討論]lisp迴圈 跟if問題

發表 由 as920029as 于 2015-02-11, 11:59

感謝大大幫忙
我有空再試試看
最近比較忙沒時間碰lisp
as920029as
as920029as
一般會員
一般會員

文章總數 : 86
年齡 : 29
來自 : 台南市
職業 : 繪圖員
愛好 : 電腦遊戲
個性 : 開朗
使用年資 : 3年
使用版本 : 2010
經驗值 : 3655
威望值 : 44
注冊日期 : 2012-05-06
男 白羊座 羊

回頂端 向下

[討論]lisp迴圈 跟if問題 Empty 回復: [討論]lisp迴圈 跟if問題

發表 由 as920029as 于 2015-02-11, 17:06

這程式有點小問題
但小弟不知道如何解決....
因為很多寫法老時說 看不是很懂
問題 出在 假如輸入1  會變成 001
但一直點下去 +1 +1....
+到10 要變成11時 又會跳回001
但我要的是 11時 會變成 011然後繼續+1+1
012~013這樣慢慢下去

想順便問一下(cond 的用法
是否有教學或多一點範例..可提供
as920029as
as920029as
一般會員
一般會員

文章總數 : 86
年齡 : 29
來自 : 台南市
職業 : 繪圖員
愛好 : 電腦遊戲
個性 : 開朗
使用年資 : 3年
使用版本 : 2010
經驗值 : 3655
威望值 : 44
注冊日期 : 2012-05-06
男 白羊座 羊

回頂端 向下

[討論]lisp迴圈 跟if問題 Empty 回復: [討論]lisp迴圈 跟if問題

發表 由 shenhung 于 2015-02-12, 19:53

那我會錯意了...請將這一行.取消就行了.. (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個以上..都沒問題.


shenhung
shenhung
高級會員
高級會員

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

回頂端 向下

[討論]lisp迴圈 跟if問題 Empty 回復: [討論]lisp迴圈 跟if問題

發表 由 as920029as 于 2015-03-05, 15:48

感謝大大講解
我試著用這方式寫期他程式看看
as920029as
as920029as
一般會員
一般會員

文章總數 : 86
年齡 : 29
來自 : 台南市
職業 : 繪圖員
愛好 : 電腦遊戲
個性 : 開朗
使用年資 : 3年
使用版本 : 2010
經驗值 : 3655
威望值 : 44
注冊日期 : 2012-05-06
男 白羊座 羊

回頂端 向下

回頂端


 
這個論壇的權限:
無法 在這個版面回復文章
[討論]lisp迴圈 跟if問題 Uos15010 [討論]lisp迴圈 跟if問題 BPl3tjj [討論]lisp迴圈 跟if問題 Ziao1510 [討論]lisp迴圈 跟if問題 Oo-2-110 [討論]lisp迴圈 跟if問題 Oooo-110 [討論]lisp迴圈 跟if問題 2020-211