Chuyển đến nội dung
Diễn đàn CADViet
Đăng nhập để thực hiện theo  
Tue_NV

Chọn text là số

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

Text thường có 2 dạng : Dạng các ký tự số và dạng các kỹ tự chữ.

Mình muốn xin Lisp khi chọn đối tượng đầu tiên bằng grid thì khi sử dụng Lisp sẽ chọn ra các đối tượng là số.

Và khi chọn đối tượng đầu tiên bằng grid thì khi sử dụng Lisp sẽ chọn ra các đối tượng là chữ.

Mong các anh em trên CADVIET giúp đỡ. Mình đang cần gấp lắm.

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
Text thường có 2 dạng : Dạng các ký tự số và dạng các kỹ tự chữ.

Mình muốn xin Lisp khi chọn đối tượng đầu tiên bằng grid thì khi sử dụng Lisp sẽ chọn ra các đối tượng là số.

Và khi chọn đối tượng đầu tiên bằng grid thì khi sử dụng Lisp sẽ chọn ra các đối tượng là chữ.

Mong các anh em trên CADVIET giúp đỡ. Mình đang cần gấp lắm.

chưa hiểu ý bạn muốn,

 

Bạn có thể nói rõ hơn được không?

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

Đầu tiên, em xin cảm ơn bác Hoành đã hồi âm lại cho em.

Ý của em muốn là chọn đối tượng là số trước để xử lý.

Trong đoạn Code dưới đây ở trên diễn đàn CADVIET để tính tổng các số.

Nếu bảng tính của em chứa cả chữ lẫn số thì khi chọn đối tượng chứa cả chữ lẫn số thì lệnh sẽ không thực thi được .

Và ý của em là đầu tiên mình chọn các đối tượng bằng grid, sau đó em nhờ bác viết dùm em lệnh để chọn ra các đối tượng text là số. Sau đó, dựa trên các đối tượng text số chọn ra đó, ta thực hiện các phép toán số học. Nếu đối tượng có chứa text chữ thì các phép toán số học sẽ không thực thi được và chương trình sẽ báo lỗi. Em nghĩ điều này rất cần cho nhiều người lắm.

Tiện thể, em nhờ bác viết Lisp chọn ra các đối tượng là text chữ sau khi chọn đối tượng bằng Grid.

Mong bác Hoanh giúp đỡ. Cảm ơn bác nhiều lắm.

 

(defun C:cg()

(setvar "CMDECHO" 0)

(setq pre (getint "\nSo chu so sau dau phay?"))

(command "luprec" pre)

(setq tong 0)

(SETQ TH (SSGET))

(SETQ QUANT (SSLENGTH TH))

(SETQ INDEX 0)

(WHILE (< INDEX QUANT)

(IF

(AND(= "TEXT" (CDR (ASSOC 0 (SETQ A (ENTGET (SSNAME TH INDEX)))))))

(PROGN

(setq s (entget (SSNAME TH INDEX)))

(setq otext (assoc 1 s))

(setq ot (cdr otext))

(setq ot (read (substr ot 1 )))

(setq tong (+ ot tong))

)

)

(setq index (+ index 1))

)

(prompt "\n Chon gia tri can thay the")

(SETQ TT (SSGET))

(SETQ QUAN (SSLENGTH TT))

(SETQ INDE 0)

(WHILE (< INDE QUAN)

(IF

(AND(= "TEXT" (CDR (ASSOC 0 (SETQ A (ENTGET (SSNAME TT INDE)))))))

(PROGN

(setq s (entget (SSNAME TT INDE)))

(setq otext (assoc 1 s))

(setq ot (cdr otext))

(setq ot (read (substr ot 1 )))

(setq nt (cons 1 (rtos Tong 2)))

(setq s (subst nt otext s))

(entmod s)

)

)

(setq inde (+ inde 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
Đầu tiên, em xin cảm ơn bác Hoành đã hồi âm lại cho em.

Ý của em muốn là chọn đối tượng là số trước để xử lý.

Trong đoạn Code dưới đây ở trên diễn đàn CADVIET để tính tổng các số.

Nếu bảng tính của em chứa cả chữ lẫn số thì khi chọn đối tượng chứa cả chữ lẫn số thì lệnh sẽ không thực thi được .

Và ý của em là đầu tiên mình chọn các đối tượng bằng grid, sau đó em nhờ bác viết dùm em lệnh để chọn ra các đối tượng text là số. Sau đó, dựa trên các đối tượng text số chọn ra đó, ta thực hiện các phép toán số học. Nếu đối tượng có chứa text chữ thì các phép toán số học sẽ không thực thi được và chương trình sẽ báo lỗi. Em nghĩ điều này rất cần cho nhiều người lắm.

Tiện thể, em nhờ bác viết Lisp chọn ra các đối tượng là text chữ sau khi chọn đối tượng bằng Grid.

Mong bác Hoanh giúp đỡ. Cảm ơn bác nhiều lắm.

 

Hàm kiểm tra nội dung của 1 chuỗi là số

không xét t/hợp chuỗi có định dạng thêm khoảng trắng giữa hàng ngàn. vd : 23 000 -> 23000

(DEFUN IsNumeric (str)

(if (not(vl-string-search " " str))

(if (member (type (read str)) '(REAL INT) )

T

nil

)

nil

)

)

Đoạn code của bạn được sửa lại :

(DEFUN IsNumeric (str)
 (if (not(vl-string-search " " str))
   (if (member (type (read str)) '(REAL INT) )
     T
     nil
     )
   nil
   )
 )

(defun C:cg ()
 (setvar "CMDECHO" 0)
 (setq pre (getint "\nSo chu so sau dau phay?"))
 (command "luprec" pre)
 (setq tong 0)
 (SETQ TH (SSGET))
 (SETQ QUANT (SSLENGTH TH))
 (SETQ INDEX 0)
 (WHILE (< INDEX QUANT)
   (IF
     (AND (= "TEXT"
      (CDR (ASSOC 0 (SETQ A (ENTGET (SSNAME TH INDEX)))))
   )
     )
      (PROGN
 (setq s (entget (SSNAME TH INDEX)))
 (setq otext (assoc 1 s))
 (setq ot (cdr otext))
 (if (IsNumeric ot) ;neu noi dung ot la so
   (setq ot (atof ot)
	 tong (+ ot tong)) ; tinh tong
   ) 	 
      )
   )
   (setq index (+ index 1))
 )
 (prompt "\n Chon gia tri can thay the")
 (SETQ TT (SSGET))
 (SETQ QUAN (SSLENGTH TT))
 (SETQ INDE 0)
 (WHILE (< INDE QUAN)
   (IF
     (AND (= "TEXT"
      (CDR (ASSOC 0 (SETQ A (ENTGET (SSNAME TT INDE)))))
   )
     )
      (PROGN
 (setq s (entget (SSNAME TT INDE)))
 (setq otext (assoc 1 s))
;;;	 (setq ot (cdr otext))
;;;	 (setq ot (read (substr ot 1)))
 (setq nt (cons 1 (rtos Tong 2 pre)))
 (setq s (subst nt otext s))
 (entmod s)
      )
   )
   (setq inde (+ inde 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
Hàm kiểm tra nội dung của 1 chuỗi là số

không xét t/hợp chuỗi có định dạng thêm khoảng trắng giữa hàng ngàn. vd : 23 000 -> 23000

(DEFUN IsNumeric (str)

(if (not(vl-string-search " " str))

(if (member (type (read str)) '(REAL INT) )

T

nil

)

nil

)

)

Đoạn code của bạn được sửa lại :

(DEFUN IsNumeric (str)
 (if (not(vl-string-search " " str))
   (if (member (type (read str)) '(REAL INT) )
     T
     nil
     )
   nil
   )
 )

(defun C:cg ()
 (setvar "CMDECHO" 0)
 (setq pre (getint "\nSo chu so sau dau phay?"))
 (command "luprec" pre)
 (setq tong 0)
 (SETQ TH (SSGET))
 (SETQ QUANT (SSLENGTH TH))
 (SETQ INDEX 0)
 (WHILE (< INDEX QUANT)
   (IF
     (AND (= "TEXT"
      (CDR (ASSOC 0 (SETQ A (ENTGET (SSNAME TH INDEX)))))
   )
     )
      (PROGN
 (setq s (entget (SSNAME TH INDEX)))
 (setq otext (assoc 1 s))
 (setq ot (cdr otext))
 (if (IsNumeric ot) ;neu noi dung ot la so
   (setq ot (atof ot)
	 tong (+ ot tong)) ; tinh tong
   ) 	 
      )
   )
   (setq index (+ index 1))
 )
 (prompt "\n Chon gia tri can thay the")
 (SETQ TT (SSGET))
 (SETQ QUAN (SSLENGTH TT))
 (SETQ INDE 0)
 (WHILE (< INDE QUAN)
   (IF
     (AND (= "TEXT"
      (CDR (ASSOC 0 (SETQ A (ENTGET (SSNAME TT INDE)))))
   )
     )
      (PROGN
 (setq s (entget (SSNAME TT INDE)))
 (setq otext (assoc 1 s))
;;;	 (setq ot (cdr otext))
;;;	 (setq ot (read (substr ot 1)))
 (setq nt (cons 1 (rtos Tong 2 pre)))
 (setq s (subst nt otext s))
 (entmod s)
      )
   )
   (setq inde (+ inde 1))
 )
)

Rất cảm ơn anh đã giúp đỡ cho em.

Nhưng tổng quát ý của em ngay từ đầu là muốn chọn đối tượng là số để xử lý sau khi chọn bằng Grid.

Vì còn nhiều lệnh AutoLisp về phép tính số học cần được giải quyết.

Hàm IsNumeric này quả thật em chưa biết.

Anh giúp em nhé. Cảm ơn anh.

(Có thể bạn chọn đối tượng đầu tiên bằng Grid rồi thực hiện lệnh AutoLisp thì các Grid biến mất. nhưng khi thực hiện lệnh Lisp thì ở trong câu Select Object : bạn nhấn chữ P(previous) các đối tượng text số chọn ra đó sẽ được chọn lại. )

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
(Có thể bạn chọn đối tượng đầu tiên bằng Grid rồi thực hiện lệnh AutoLisp thì các Grid biến mất. nhưng khi thực hiện lệnh Lisp thì ở trong câu Select Object : bạn nhấn chữ P(previous) các đối tượng text số chọn ra đó sẽ được chọn lại. )

 

Hy vọng đoạn code sau đúng ý bạn.

 

(DEFUN IsNumeric (str)
 (if (not(vl-string-search " " str))
   (if (member (type (read str)) '(REAL INT) )
     T
     nil
     )
   nil
   )
 )

(defun C:cg1 ()
 (setvar "CMDECHO" 0)
 (setq pre (getint "\nSo chu so sau dau phay?"))
 (command "luprec" pre)
 (setq tong 0)
 (SETQ TH (SSGET (list (cons 0 "TEXT"))))
 (SETQ QUANT (SSLENGTH TH))
 (SETQ INDEX 0)
 (WHILE (< INDEX QUANT)
 (setq s (entget (SSNAME TH INDEX)))
 (setq otext (assoc 1 s))
 (setq ot (cdr otext))
 (if (IsNumeric ot) ;neu noi dung ot la so
   (setq ot (atof ot)
	 tong (+ ot tong)) ; tinh tong
   ) 	 
   (setq index (+ index 1))
 )
 (prompt "\n Chon gia tri can thay the")
 (SETQ TT (SSGET))
 (SETQ QUAN (SSLENGTH TT))
 (SETQ INDE 0)
 (WHILE (< INDE QUAN)
 (setq s (entget (SSNAME TT INDE)))
 (setq otext (assoc 1 s))
 (setq nt (cons 1 (rtos Tong 2 pre)))
 (setq s (subst nt otext s))
 (entmod s)
   (setq inde (+ inde 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
Hy vọng đoạn code sau đúng ý bạn.

 

(DEFUN IsNumeric (str)
 (if (not(vl-string-search " " str))
   (if (member (type (read str)) '(REAL INT) )
     T
     nil
     )
   nil
   )
 )

(defun C:cg1 ()
 (setvar "CMDECHO" 0)
 (setq pre (getint "\nSo chu so sau dau phay?"))
 (command "luprec" pre)
 (setq tong 0)
 (SETQ TH (SSGET (list (cons 0 "TEXT"))))
 (SETQ QUANT (SSLENGTH TH))
 (SETQ INDEX 0)
 (WHILE (< INDEX QUANT)
 (setq s (entget (SSNAME TH INDEX)))
 (setq otext (assoc 1 s))
 (setq ot (cdr otext))
 (if (IsNumeric ot) ;neu noi dung ot la so
   (setq ot (atof ot)
	 tong (+ ot tong)) ; tinh tong
   ) 	 
   (setq index (+ index 1))
 )
 (prompt "\n Chon gia tri can thay the")
 (SETQ TT (SSGET))
 (SETQ QUAN (SSLENGTH TT))
 (SETQ INDE 0)
 (WHILE (< INDE QUAN)
 (setq s (entget (SSNAME TT INDE)))
 (setq otext (assoc 1 s))
 (setq nt (cons 1 (rtos Tong 2 pre)))
 (setq s (subst nt otext s))
 (entmod s)
   (setq inde (+ inde 1))
 )
)

Đúng là đoạn Code trên tính tổng của các số (sau khi loại bỏ các text chữ). Nhưng ý của em ngay từ đầu là muốn chọn đối tượng là text số để xử lý phép tính số học sau khi chọn bằng Grid.

Ứng dụng hàm IsNumeric là hàm kiểm tra nội dung của 1 chuỗi là số, em viết đoạn Code dưới đây để thực hiện phép tính cộng thêm vào giá trị được chọn để giá trị được chọn nhận kết quả mới là thêm một giá trị cộng thêm vào. Nhưng đoạn Code dưới bị lỗi mà em chưa biết sai ở đâu. Anh sửa lại giúp em với nhé.

(DEFUN IsNumeric (str)
 (if (not(vl-string-search " " str))
   (if (member (type (read str)) '(REAL INT) )
     T
     nil
     )
   nil
   )
 )
(defun c:cso()
(setvar "CMDECHO" 0)
(setq pre (getint "\nSo chu so sau dau phay?"))
(command "luprec" pre)  
(setq co (getreal "\nGia tri can cong them:"))
(SETQ TH (SSGET(list(cons 0 "TEXT"))))
(SETQ QUANT (SSLENGTH TH))
 (SETQ INDEX 0)
 (WHILE (< INDEX QUANT)
		 (setq s (entget (SSNAME TH INDEX)))
	   (setq otext (assoc 1 s))
	   (setq ot (cdr otext))
	  (if(IsNumeric ot)
	      (setq ot (atof ot))
	      (setq nt (cons 1 (rtos (+ ot co))))  
	      (setq s (subst nt otext s))
	      (entmod s)
   		   )
   (setq index (+ index 1))
 )
)

Cám ơn anh nhé.

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

Bài tóan trên tôi phát biểu lại thế này, bạn xem có đúng không nhé

Con người khi nhìn vào một string thấy tòan số (hệ thập phân) thì thì hiểu đó là một số, còn khi nhìn vào một string có ký tự không là số thập phân chữ thì hiểu đó là string ký tự

Tuy nhiên đối với máy tính thì tất cả các string trên nền AutoCad đều là chuỗi ký tự.

Bây giờ cần một LISP nào đó hiểu giống con người???

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
Bài tóan trên tôi phát biểu lại thế này, bạn xem có đúng không nhé

Con người khi nhìn vào một string thấy tòan số (hệ thập phân) thì thì hiểu đó là một số, còn khi nhìn vào một string có ký tự không là số thập phân chữ thì hiểu đó là string ký tự

Tuy nhiên đối với máy tính thì tất cả các string trên nền AutoCad đều là chuỗi ký tự.

Bây giờ cần một LISP nào đó hiểu giống con người???

 

Hàm lọc các đối tượng TEXT có nội dung là số (nguyên, thập phân)

 

(defun ChonTextSo (/ ss i ent str ss1)

(if (setq ss (ssget (list (cons 0 "TEXT"))))

(progn

(setq i 0

ss1 (ssadd)

)

(repeat (sslength ss)

(setq ent (ssname ss i)

str (cdr(assoc 1 (entget ent)))

i (+ 1 i)

)

(if (distof str 2)

(ssadd ent ss1)

)

)

(if (> (sslength ss1) 0)

ss1

)

)

)

)

 

To : Tue_NV

đoạn Code của bạn bị lỗi ở phần hàm IF (bạn xem lại cú pháp của hàm này nhé)

 

Đây là đoạn code có nội dung như bạn yêu cầu :

;;; ham loc ra cac doi tuong Text co noi dung la so thap phan
(defun ChonTextSo (/ ss i ent str ss1) 
 (if (setq ss (ssget (list (cons 0 "TEXT"))))
   (progn
     (setq i	0
    ss1	(ssadd)
     )
     (repeat (sslength ss)
(setq ent (ssname ss i)
      str (cdr(assoc 1 (entget ent)))
      i	  (+ 1 i)
)
(if (distof str 2)
  (ssadd ent ss1)
)
     )
     (if (> (sslength ss1) 0)
ss1
     )      
   )
 )
)

;;;-------
(defun c:cso ()
 (setvar "CMDECHO" 0)
 (setq pre (getint "\nSo chu so sau dau phay?"))
 (command "luprec" pre)
 (setq co (getreal "\nGia tri can cong them:"))
 (SETQ	TH    (ChonTextSo)
QUANT (if TH (SSLENGTH TH))
INDEX 0
 )
 (WHILE (< INDEX QUANT)
   (setq s	(entget (SSNAME TH INDEX))
  otext	(assoc 1 s)
  ot	(cdr otext)
  ot	(atof ot)
  nt	(cons 1 (rtos (+ ot co)))
  s	(subst nt otext s)
   )
   (entmod s)
   (setq index (+ index 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

Hàm Isnumeric và hàm ChonTextSo là Hàm lọc các đối tượng TEXT có nội dung là số (nguyên, thập phân) đã giúp em xử lý các phép toán số học về text số (sau khi loại bỏ các text chữ).

Em cảm ơn anh nhiều lắm.

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ại sao chúng ta không sử dụng hàm numberp có sẵn trong lisp để kiểm tra string đó có phải là số hay không?

 

 

Nếu bạn viết code như sau

(setq n 200)
(setq Isnumber (numberp n))

thì Isnumber có giá tri T

Còn nếu bạn viết code như sau

(setq n "200")
(setq Isnumber (numberp n))

thì Isnumber có giá tri nil

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
Hàm Isnumeric và hàm ChonTextSo là Hàm lọc các đối tượng TEXT có nội dung là số (nguyên, thập phân) đã giúp em xử lý các phép toán số học về text số (sau khi loại bỏ các text chữ).

Em cảm ơn anh nhiều lắm.

 

Thế bác ơi!Nếu em chỉ muốn lọc ra số và chữ riêng biệt thì phải làm sao?(chỉ đơn thuần là lọc ra 2 loại)

Em thử dùng lisp "cso" nhưng nó cộng với 1 số thập phân và sau khi muốn lựa chọn lại text số thì nó lại chọn cả text chữ.

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
Thế bác ơi!Nếu em chỉ muốn lọc ra số và chữ riêng biệt thì phải làm sao?(chỉ đơn thuần là lọc ra 2 loại)

Em thử dùng lisp "cso" nhưng nó cộng với 1 số thập phân và sau khi muốn lựa chọn lại text số thì nó lại chọn cả text chữ.

đoạn code của bác Gia Bach là cái bạn đang cần đó thôi.

(if (distof str 2) (thỏa mãn thì là số) (ko thỏa mãn thì là chuỗi ký tự))

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
đoạn code của bác Gia Bach là cái bạn đang cần đó thôi.

(if (distof str 2) (thỏa mãn thì là số) (ko thỏa mãn thì là chuỗi ký tự))

 

Mình không rành về lisp lắm.Thái có thể viết giúp mình 1 lisp nhỏ để chọn text số được không.Mình thử với đoạn lisp của anh Gia Bách nhưng nó vẫn chọn cả số và chữ.Giúp mình nha.

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
Mình không rành về lisp lắm.Thái có thể viết giúp mình 1 lisp nhỏ để chọn text số được không.Mình thử với đoạn lisp của anh Gia Bách nhưng nó vẫn chọn cả số và chữ.Giúp mình nha.

Bạn chạy thử đoạn code này

(defun c:LocTextSo (/ ss ent str ss1)
 (setq ss1 (ssadd))
 (if (setq ss (ssget (list (cons 0 "TEXT"))))
   (progn
     (foreach ent (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))
(setq str (cdr(assoc 1 (entget ent))))
(if (distof str 2)
  (ssadd ent ss1)
  )
)      
     (if (> (sslength ss1) 0)
       (progn
         (sssetfirst nil)
  (princ (strcat "\nChon duoc " (itoa (sslength ss1)) " doi tuong Text co noi dung la so."))
         (sssetfirst nil ss1)
  )
)
     )
   )
 )

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

Xin "múa rìu qua mằt thợ":

 

(defun NUMATXT(/ ss ss_num ss_txt)

(setq ss (ssget '((0 . "TEXT"))))

(setq ss_num (ssadd)) ; tập chứa các string là number

(setq ss_txt (ssadd)) ; tập chứa các string là text

(Setq i 0)

(while (< i (sslength ss))

(setq ss_i (ssname ss i))

(setq str_i (cdr(assoc 1 (entget ss_i))))

(if (distof str_i)

(ssadd ss_i ss_num)

(ssadd ss_i ss_txt)

)

(setq i (1+ i))

)

)

 

"kiểm tra trước khi sử dụng"

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
Bạn chạy thử đoạn code này

(defun c:LocTextSo (/ ss ent str ss1)
 (setq ss1 (ssadd))
 (if (setq ss (ssget (list (cons 0 "TEXT"))))
   (progn
     (foreach ent (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))
(setq str (cdr(assoc 1 (entget ent))))
(if (distof str 2)
  (ssadd ent ss1)
  )
)      
     (if (> (sslength ss1) 0)
       (progn
         (sssetfirst nil)
  (princ (strcat "\nChon duoc " (itoa (sslength ss1)) " doi tuong Text co noi dung la so."))
         (sssetfirst nil ss1)
  )
)
     )
   )
 )

 

 

thanks pác Gia Bách! Em lọc được rồi.Em down lisp về làm mãi mới nhớ ra la phải kiểm tra font của lisp. :s_big:

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
bạn ơi. cái lisp : loctextso. mình muốn lọc text số là số vd: 1.15, 2.53... còn các số là: 2, 3. thì bỏ qua không chọn thì chọn.

bạn viết tiếp bổ sung cho minh tí nhé.

mình làm san nền nên cần tách riêng các số đó ra riêng. vì các số tự nhiên đó là số tầng cao nhà mình không cần, mình chỉ cần cốt cao độ thôi.

.......

Lisp chọn số thực.

(defun c:SoThuc(/ ent i ss ss1 str)
 (if (setq ss (ssget (list (cons 0 "TEXT"))))
   (progn
     (setq i -1 ss1 (ssadd))
     (while (setq ent (ssname ss (setq i (1+ i))))
       (setq str (cdr(assoc 1 (entget ent))))
       (if (and (distof str 2)
	 (= (type (read str)) 'REAL ))
  (ssadd ent ss1) ))
     (if (> (sslength ss1) 0)
       (progn
         (sssetfirst nil)
  (princ (strcat "\nChon duoc " (itoa (sslength ss1)) " doi tuong Text co noi dung la so thuc."))
         (sssetfirst nil ss1)  )) ) ))

  • Vote tăng 2

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
Lisp chọn số thực.

(defun c:SoThuc(/ ent i ss ss1 str)
 (if (setq ss (ssget (list (cons 0 "TEXT"))))
   (progn
     (setq i -1 ss1 (ssadd))
     (while (setq ent (ssname ss (setq i (1+ i))))
       (setq str (cdr(assoc 1 (entget ent))))
       (if (and (distof str 2)
	 (= (type (read str)) 'REAL ))
  (ssadd ent ss1) ))
     (if (> (sslength ss1) 0)
       (progn
         (sssetfirst nil)
  (princ (strcat "\nChon duoc " (itoa (sslength ss1)) " doi tuong Text co noi dung la so thuc."))
         (sssetfirst nil ss1)  )) ) ))

Nếu dòng này của anh gia_bach mà các bạn sửa lại

(= (type (read str)) 'REAL ))

thành :

(= (type (read str)) 'INT ))

 

thì sẽ thành Lisp chọn số nguyên tức thì :D

Cảm ơn anh gia_bach nhiều

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

Các lisp trên có nhược điểm là sau khi chọn text rồi mới kiểm tra xem text đó là số hay không. Lisp dưới đây chỉ chọn text số luôn mà không cần mã lệnh kiểm tra.

 

Lisp chọn số thực:

(defun c:chonthuc()
 (setq ss (ssget '((0 . "TEXT") (1 . "~*[~0-9],`.*~`.*"))))
)

 

Lisp chọn số nguyên:

(defun c:chonnguyen()
 (setq ss (ssget '((0 . "TEXT") (1 . "~*[~0-9]*"))))
)

  • Vote tăng 2

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
Các lisp trên có nhược điểm là sau khi chọn text rồi mới kiểm tra xem text đó là số hay không. Lisp dưới đây chỉ chọn text số luôn mà không cần mã lệnh kiểm tra.

 

Lisp chọn số thực:

(defun c:chonthuc()
 (setq ss (ssget '((0 . "TEXT") (1 . "~*[~0-9],`.*~`.*"))))
)

 

Lisp chọn số nguyên:

(defun c:chonnguyen()
 (setq ss (ssget '((0 . "TEXT") (1 . "~*[~0-9]*"))))
)

Chào bác Hoành

Lisp chọn số nguyên chạy OK.

 

Lisp chọn số thực có vấn đề

-> chọn số thực, chọn số nguyên và cả string nữa :D

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

Các anh ơi!Giúp em quả này với:

Em có 1 loạt các cao độ từ 0.00 - 1000.00 chẳng hạn.Giờ em muốn chọn các số có giá trị lớn hơn hoặc bé hơn 1 giá trị cho trước.

VD: em muốn chọn các giá trị >100.00

hay chọn các giá trị 50.00:iluvyousmiley:

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
Các anh ơi!Giúp em quả này với:

Em có 1 loạt các cao độ từ 0.00 - 1000.00 chẳng hạn.Giờ em muốn chọn các số có giá trị lớn hơn hoặc bé hơn 1 giá trị cho trước.

VD: em muốn chọn các giá trị >100.00

hay chọn các giá trị 50.00:iluvyousmiley:

Lisp này Tue_NV đã viết giúp cho bạn bach1212.

Nó ở đây :

Bai viet 2741

  • 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
Lisp này Tue_NV đã viết giúp cho bạn bach1212.

Nó ở đây :

Bai viet 2741

 

Cảm ơn anh Tuệ nhìu nhìu.Em thanks cho bác mấy fát liền.

Nhưng anh ơi! Giúp em thêm 1 tí được không.Em muốn chọn các số nằm trong một khoảng thì sao.

Em muốn chọn giá trị X: A :D

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
Đăng nhập để thực hiện theo  

×