Chuyển đến nội dung
Diễn đàn CADViet
  • Thông báo

    • Nguyen Hoanh

      CADViet đã hoàn tất nâng cấp   14/09/2017

      Chào các bạn, CADViet đã hoàn tất việc nâng cấp lên phiên bản mới. Tất cả các chức năng đã hoạt động theo kỳ vọng của ban quản trị. Nếu có vấn đề gì cần phản hồi, các bản post ở đây nhé: Trân trọng, Nguyễn Hoành.
thanhduan2407

[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?

Các bài được khuyến nghị

thanhduan2407    226

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

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Tot77    501

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.

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
ndtnv    397

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

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Doan Van Ha    2.676

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")))
 

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
thanhduan2407    226

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

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Tạo một tài khoản hoặc đăng nhập để nhận xét

Bạn cần phải là một thành viên để lại một bình luận

Tạo tài khoản

Đăng ký một tài khoản mới trong cộng đồng của chúng tôi. Điều đó dễ mà.

Đăng ký tài khoản mới

Đăng nhập

Bạn có sẵn sàng để tạo một tài khoản ? Đăng nhập tại đây.

Đăng nhập ngay


×