Đến nội dung


Hình ảnh
- - - - -

[Nhờ kiểm tra LISP] Nhờ các bác xem dùm LISP kiểm tra Text nhập vào có trên bản vẽ hay không?


  • Please log in to reply
5 replies to this topic

#1 thanhduan2407

thanhduan2407

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 992 Bài viết
Điểm đánh giá: 223 (khá)

Đã gửi 05 June 2014 - 03:03 PM

Nhờ các bác chỉ giáo.
Em viết Lisp kiểm tra Text nhập vào có ở trong bản vẽ không?
Em Test hoài mà sao nó vẫn lỗi. Em chưa tìm thấy lỗi ở đâu.
Mong các bác giúp

 

(defun C:KK (/ NamePoint ss i temp Tdo NameText )
(vl-load-com)
(setq NamePoint (getstring "\n Nhap ten diem can tim: "))
(setq ss (ssget "_X" (list (cons 0 "TEXT"))))
(setq i 1)
(while (< i (sslength ss))
(setq temp (entget (ssname ss i)))
(setq NameText (cdr (assoc 1 temp)))
(if (= NamePoint NameText )
(setq KQ "OK")
(setq KQ "Not_OK")
)
(setq i (1+ i))
)
(Alert KQ)
(princ)
)

Rõ ràng là em nhập đúng tên Text trên bản vẽ mà nó báo là không. Haizzzz


  • 0



Tôi là con kiến bò trên sa mạc kiến thức bao la. Biển học thật rộng lớn







#2 Tot77

Tot77

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 990 Bài viết
Điểm đánh giá: 498 (tốt)

Đã gửi 05 June 2014 - 03:18 PM

Bạn đưa cái (setq KQ "Not_OK") ra ngoài vòng while như sau:

(defun C:KK (/ NamePoint ss i temp Tdo NameText)
  (vl-load-com)
  (setq NamePoint (getstring "\n Nhap ten diem can tim: "))
  (setq ss (ssget "_X" (list (cons 0 "TEXT"))))
  (setq i 1)
  (setq KQ "Not_OK")
  (while (< i (sslength ss))
    (setq temp (entget (ssname ss i)))
    (setq NameText (cdr (assoc 1 temp)))
    (if (= NamePoint NameText)
      (setq KQ "OK")      
    )
    (setq i (1+ i))
  )
  (Alert KQ)
  (princ)
)
 

 

Nếu ở trong vòng while và if thì nó sẽ lấy kết quả so sánh của cái text cuối cùng.


  • 1

#3 ndtnv

ndtnv

    biết lệnh minsert

  • Members
  • PipPipPipPipPipPip
  • 437 Bài viết
Điểm đánh giá: 384 (khá)

Đã gửi 05 June 2014 - 03:18 PM

Kiểm tra thêm 2 dòng:
(setq i 0): index của hàm (ssname ss i) bắt đầu từ 0
(getstring "\n Nhap ten diem can tim: ") : không nhận dấu cách


  • 1

#4 thanhduan2407

thanhduan2407

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 992 Bài viết
Điểm đánh giá: 223 (khá)

Đã gửi 05 June 2014 - 03:26 PM

Thanks bác nhiều.

Đã test và chạy ngon.


  • 0



Tôi là con kiến bò trên sa mạc kiến thức bao la. Biển học thật rộng lớn







#5 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 05 June 2014 - 05:59 PM

Ngắn gọn hơn thì như vầy:

(defun C:KK (/ NamePoint)
 (setq NamePoint (getstring T "\n Nhap ten diem can tim: "))
 (alert 
  (if (ssget "_X" (list (cons 0 "TEXT") (cons 1 NamePoint)))
   "OK"
   "Not_OK")))
 


  • 1

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#6 thanhduan2407

thanhduan2407

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 992 Bài viết
Điểm đánh giá: 223 (khá)

Đã gửi 05 June 2014 - 08:05 PM

Ngắn gọn hơn thì như vầy:

(defun C:KK (/ NamePoint)
 (setq NamePoint (getstring T "\n Nhap ten diem can tim: "))
 (alert 
  (if (ssget "_X" (list (cons 0 "TEXT") (cons 1 NamePoint)))
   "OK"
   "Not_OK")))
 

À, em còn một số mục đích khác nên để nguyên vậy bác ạ.

Cảm ơn bác Doan Van Ha, bác ndtnv và bác Tot77


  • 0



Tôi là con kiến bò trên sa mạc kiến thức bao la. Biển học thật rộng lớn