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

Xin Lisp Lọc Test Có Một Số Chữ Giống Nhau.

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

Nad SK    4

Lọc Text chứ không phải Test nhé bà con:

Em đang triển khai WaterGEMS. Xuất file qua AutoCAD thì kết quả có nhiều thứ giống nhau nhưng lại nằm cùng trên 1 layer:

L=1000m; L=200m;... Q=20l/s; Q=30l/s;... h=10m; h=20m những cái này đều nằm trên một layer.

Em muốn tách các text này ra các layer khác nhau L, Q, h cho tiện quản lý.

File bản vẽ đã tạo sẵn các layer: Length, Flow, Elevation ...

Cần lisp lọc các đối tượng L=* rồi đưa vào layer Length; Q=* đưa vào layer Flow; h=* đưa vào layer Elevation.

Em đã dùng lệnh FI thần thánh rồi nhưng nhiều file giống nhau nên muốn làm nhanh.

Chỉnh sửa theo Nad SK

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
Bee    108

Lọc Text chứ không phải Test nhé bà con:

Em đang triển khai WaterGEMS. Xuất file qua AutoCAD thì kết quả có nhiều thứ giống nhau nhưng lại nằm cùng trên 1 layer:

L=1000m; L=200m;... Q=20l/s; Q=30l/s;... h=10m; h=20m những cái này đều nằm trên một layer.

Em muốn tách các text này ra các layer khác nhau L, Q, h cho tiện quản lý.

File bản vẽ đã tạo sẵn các layer: Length, Flow, Elevation ...

Cần lisp lọc các đối tượng L=* rồi đưa vào layer Length; Q=* đưa vào layer Flow; h=* đưa vào layer Elevation.

Em đã dùng lệnh FI thần thánh rồi nhưng nhiều file giống nhau nên muốn làm nhanh.

Cái này dễ mà, tưởng Nad SK không phải hỏi Lisp chứ nhỉ ^_^

  • 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
Nad SK    4

Cái này dễ mà, tưởng Nad SK không phải hỏi Lisp chứ nhỉ ^_^

Xa rời () cũng hơn 10 năm rồi. Giờ đầu óc toàn bỉm sữa tã thôi bác ạ. Giờ đụng chuyện mới cần triển khai Lisp cho nó nhanh.

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
quocmanh04tt    385

Cái nào là Lờ thì đổ sữa vào, Cái là Cu (Q) thì bọc bỉm vào, còn hát (h) thì nhét tã vào. Xong, vứt vào xô chậu, đi 1 vòng về, tự khắc vợ nó phân loại ngay. hehehe...

  • 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
Nad SK    4

Chả lẽ lại lọ mọ lục lại sách vở trong khi con đang đòi bú? Không có người anh em nào giúp mì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
quocmanh04tt    385

Các layer có sẵn hay không, không quan trọng:

 

(defun c:tt  (/ entmod_lay ent i lse ss str)
  (defun entmod_lay (lay lst) (entmod (subst (cons 8 lay) (assoc 8 lst) lst)))
  (if (setq ss (ssget "_X" '((0 . "TEXT"))))
    (repeat (setq i (sslength ss))
      (setq ent (ssname ss (setq i (1- i)))
            lse (entget ent)
            str (cdr (assoc 1 lse)))
      (cond ((wcmatch (strcase str) "L=*") (entmod_lay "Length" lse))
            ((wcmatch (strcase str) "Q=*") (entmod_lay "Flow" lse))
            ((wcmatch (strcase str) "H=*") (entmod_lay "Elevation" lse)))))
  (princ))

  • 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
Bee    108

Xa rời () cũng hơn 10 năm rồi. Giờ đầu óc toàn bỉm sữa tã thôi bác ạ. Giờ đụng chuyện mới cần triển khai Lisp cho nó nhanh.

Chậc chậc đối xử lisp thế là ko đc rồi. Bth thì bỏ rơi nó, đến lúc cần mới chạy long sòng sọc. Heizz. Kiểu này khi làm tướng là đối xử với quân ko công bằng roài. Thi thoảng vào free vài cái lisp cho bọn trẻ con dùng để nhớ nó tí.

Dầu sao cũng quick tí đỡ bùn vậy

(defun c:test ()
  (if (setq ss (ssget '((0 . "TEXT"))))
    (progn
      (setq n 0)
      (repeat (sslength ss)
	(setq value (cdr (assoc 1 (entget (ssname ss n)))))
	(setq char (substr value 1 2))
	(cond
	  ((or (= char "L=") (= char "l="))
	   (entmod (subst (cons 8 "Length") (assoc 8 (entget (ssname ss n)))))
	   )
	  ((or (= char "Q=") (= char "q="))
	   (entmod (subst (cons 8 "Flow") (assoc 8 (entget (ssname ss n)))))
	   )
	  ((or (= char "H=") (= char "h="))
	   (entmod (subst (cons 8 "Elevation") (assoc 8 (entget (ssname ss n)))))
	   )
	  );cond
	(setq n (1+ n))
	);repeat
      )
    )
  (princ)
  )

^_^

  • 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
Nad SK    4

Các layer có sẵn hay không, không quan trọng:

 

(defun c:tt  (/ entmod_lay ent i lse ss str)

  (defun entmod_lay (lay lst) (entmod (subst (cons 8 lay) (assoc 8 lst) lst)))

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

    (repeat (setq i (sslength ss))

      (setq ent (ssname ss (setq i (1- i)))

            lse (entget ent)

            str (cdr (assoc 1 lse)))

      (cond ((wcmatch (strcase str) "L=*") (entmod_lay "Length" lse))

            ((wcmatch (strcase str) "Q=*") (entmod_lay "Flow" lse))

            ((wcmatch (strcase str) "H=*") (entmod_lay "Elevation" lse)))))

  (princ))

Cái của bác Mạnh hình như phân biệt chữ hoa chữ thường thì phải. Thay bằng "q=*" là không được.

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
conghoa    93

 

(defun c:tt  (/ entmod_lay ent i lse ss str)

  (defun entmod_lay (lay lst) (entmod (subst (cons 8 lay) (assoc 8 lst) lst)))
  (if (setq ss (ssget "_X" '((0 . "TEXT"))))
    (repeat (setq i (sslength ss))
      (setq ent (ssname ss (setq i (1- i)))
            lse (entget ent)
            str (cdr (assoc 1 lse)))
      (cond ((wcmatch (strcase str) "L=*") (entmod_lay "Length" lse))
            ((wcmatch (strcase str) "Q=*") (entmod_lay "Flow" lse))
((wcmatch (strcase str) "q=*") (entmod_lay "Flow" lse))
((wcmatch (strcase str) "h=*") (entmod_lay "Elevation" lse))
((wcmatch (strcase str) "l=*") (entmod_lay "Length" lse))
            ((wcmatch (strcase str) "H=*") (entmod_lay "Elevation" lse)))))
  (princ))

Theo em thì bác thêm mấy cái dòng xanh xanh này vào là được =)). Mặc dù em chẳng bik gì về lisp nhưng đoán như thế =))

  • 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
Nad SK    4

Theo em thì bác thêm mấy cái dòng xanh xanh này vào là được =)). Mặc dù em chẳng bik gì về lisp nhưng đoán như thế =))

Trường hợp của em là như vậy:

- Nếu ở LISP là H hoa thì chương trình chạy ngon lành trong bản vẽ H hoa hay h thường đều gom vào 1 rổ Elevation hết.

- Nhưng em lại muốn H hoa vào Elevation và h thường vào Elevator chẳng hạn hoặc chỉ muốn lọc h thường không lọc H hoa, bản vẽ chỉ có h thường thì khi ra ngoài LISP chỉnh h= thì chương trình không lọc.

- Bản vẽ của em chỉ có h thường, Lisp H hoa thì không lọc được. Buộc phải find replace trước rồi mới chạy Lisp.

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
quocmanh04tt    385

Hàm (strcase str): Chữ Hoa hay thường đều chuyển về hoa tất. Vậy nếu muốn phân biệt Hoa và thường thì bỏ strcase cụ thể:

(defun c:tt  (/ entmod_lay ent i lse ss str)
  (defun entmod_lay (lay lst) (entmod (subst (cons 8 lay) (assoc 8 lst) lst)))
  (if (setq ss (ssget "_X" '((0 . "TEXT"))))
    (repeat (setq i (sslength ss))
      (setq ent (ssname ss (setq i (1- i)))
            lse (entget ent)
            str (cdr (assoc 1 lse)))
      (cond ((wcmatch
(strcase str) "L=*") (entmod_lay "Length" lse))
                ((wcmatch
(strcase str) "Q=*") (entmod_lay "Flow" lse))

                ((wcmatch str "h=*") (entmod_lay "Elevator" lse))

                ((wcmatch str "H=*") (entmod_lay "Elevation" lse)))))
  (princ))

Hoặc:

      (cond ((wcmatch str "L=*,l=*") (entmod_lay "Length" lse))
                ((wcmatch 
str "Q=*,q=*") (entmod_lay "Flow" lse))

                ((wcmatch str "h=*") (entmod_lay "Elevator" lse))

                ((wcmatch str "H=*") (entmod_lay "Elevation" lse)))

 

​P/s: Muốn phân biệt Lờ to, lờ nhỏ, Cu to, cu nhỏ cũng tương tự.

  • 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

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  

×