Đến nội dung


Hình ảnh
- - - - -

Chọn text là số


  • Please log in to reply
26 replies to this topic

#1 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 09 September 2008 - 03:32 PM

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.
  • 0

#2 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 4105 Bài viết
Điểm đánh giá: 4495 (đỉnh cao)

Đã gửi 09 September 2008 - 03:43 PM

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?
  • 0

#3 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 10 September 2008 - 08:58 AM

Đầ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))
)
)
  • 0

#4 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1436 Bài viết
Điểm đánh giá: 1426 (rất tốt)

Đã gửi 10 September 2008 - 10:29 AM

Đầ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))
)
)

  • 0

#5 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 10 September 2008 - 03:37 PM

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. )
  • 0

#6 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1436 Bài viết
Điểm đánh giá: 1426 (rất tốt)

Đã gửi 10 September 2008 - 04:28 PM

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

  • 0

#7 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 11 September 2008 - 08:32 AM

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é.
  • 0

#8 vndesperados

vndesperados

    biết lệnh xref

  • Members
  • PipPipPipPipPipPipPip
  • 547 Bài viết
Điểm đánh giá: 253 (khá)

Đã gửi 11 September 2008 - 09:15 AM

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???
  • 0

#9 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1436 Bài viết
Điểm đánh giá: 1426 (rất tốt)

Đã gửi 11 September 2008 - 10:59 AM

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

  • 0

#10 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 11 September 2008 - 03:55 PM

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.
  • 0

#11 tien2005

tien2005

    biết lệnh properties

  • Members
  • PipPipPipPip
  • 257 Bài viết
Điểm đánh giá: 94 (tàm tạm)

Đã gửi 13 September 2008 - 12:14 PM

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?
  • 0

#12 vndesperados

vndesperados

    biết lệnh xref

  • Members
  • PipPipPipPipPipPipPip
  • 547 Bài viết
Điểm đánh giá: 253 (khá)

Đã gửi 13 September 2008 - 12:23 PM

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
  • 0

#13 w1nDream

w1nDream

    biết lệnh ddedit

  • Members
  • PipPipPipPip
  • 293 Bài viết
Điểm đánh giá: 73 (tàm tạm)

Đã gửi 14 September 2009 - 08:13 PM

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ữ.
  • 0
__Tâm tựa lưu thủY__
Vi nhân nan

#14 Thaistreetz

Thaistreetz

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 903 Bài viết
Điểm đánh giá: 505 (tốt)

Đã gửi 14 September 2009 - 09:25 PM

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ự))
  • 0

Hình đã gửi
IN HIM, I TRUST. THE TRUST IN MY GOD


#15 w1nDream

w1nDream

    biết lệnh ddedit

  • Members
  • PipPipPipPip
  • 293 Bài viết
Điểm đánh giá: 73 (tàm tạm)

Đã gửi 15 September 2009 - 09:46 AM

đ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.
  • 0
__Tâm tựa lưu thủY__
Vi nhân nan

#16 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1436 Bài viết
Điểm đánh giá: 1426 (rất tốt)

Đã gửi 15 September 2009 - 10:49 AM

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

  • 0

#17 master_worse

master_worse

    biết lệnh offset

  • Advance Member
  • PipPipPip
  • 170 Bài viết
Điểm đánh giá: 87 (tàm tạm)

Đã gửi 15 September 2009 - 11:16 AM

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"
  • 0

Ngu dốt không đáng thẹn bằng thiếu ý chí học hỏi


Tri thức làm người ta khiêm tốn, ngu si làm người ta kiêu ngạo (Ngạn ngữ Anh)


#18 w1nDream

w1nDream

    biết lệnh ddedit

  • Members
  • PipPipPipPip
  • 293 Bài viết
Điểm đánh giá: 73 (tàm tạm)

Đã gửi 15 September 2009 - 11:53 AM

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:
  • 0
__Tâm tựa lưu thủY__
Vi nhân nan

#19 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1436 Bài viết
Điểm đánh giá: 1426 (rất tốt)

Đã gửi 19 March 2010 - 11:18 AM

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

  • 2

#20 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 19 March 2010 - 11:46 AM

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
  • 0