Đến nội dung


Hình ảnh
5 stars - based on 24598 reviews
- - - - -

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


  • Please log in to reply
11 replies to this topic

#1 Nad SK

Nad SK

    biết vẽ spline

  • Members
  • PipPip
  • 90 Bài viết
Điểm đánh giá: -4 (bình thường)

Đã gửi 25 March 2017 - 01:57 PM

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.


Bài viết đã được chỉnh sửa nội dung bởi Nad SK: 25 March 2017 - 02:13 PM

  • 0

#2 Bee

Bee

    biết dimdiameter

  • Members
  • PipPipPipPipPip
  • 331 Bài viết
Điểm đánh giá: 105 (tàm tạm)

Đã gửi 25 March 2017 - 05:40 PM

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ỉ ^_^


  • 1

#3 Nad SK

Nad SK

    biết vẽ spline

  • Members
  • PipPip
  • 90 Bài viết
Điểm đánh giá: -4 (bình thường)

Đã gửi 25 March 2017 - 07:36 PM

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.


  • 0

#4 quocmanh04tt

quocmanh04tt

    biết lệnh adcenter

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

Đã gửi 25 March 2017 - 09:32 PM

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


  • 1

#5 Nad SK

Nad SK

    biết vẽ spline

  • Members
  • PipPip
  • 90 Bài viết
Điểm đánh giá: -4 (bình thường)

Đã gửi 25 March 2017 - 09:38 PM

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


  • 0

#6 quocmanh04tt

quocmanh04tt

    biết lệnh adcenter

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

Đã gửi 25 March 2017 - 09:38 PM

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


  • 2

#7 Bee

Bee

    biết dimdiameter

  • Members
  • PipPipPipPipPip
  • 331 Bài viết
Điểm đánh giá: 105 (tàm tạm)

Đã gửi 25 March 2017 - 09:40 PM

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

^_^


  • 1

#8 Nad SK

Nad SK

    biết vẽ spline

  • Members
  • PipPip
  • 90 Bài viết
Điểm đánh giá: -4 (bình thường)

Đã gửi 25 March 2017 - 09:42 PM

Cảm ơn các tráng sỹ. Chả có gì cảm ơn cả. Chả lẽ lại lấy key QPL 1.1 ra tặng. Hic.


  • 0

#9 Nad SK

Nad SK

    biết vẽ spline

  • Members
  • PipPip
  • 90 Bài viết
Điểm đánh giá: -4 (bình thường)

Đã gửi 25 March 2017 - 10:36 PM

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.


  • 0

#10 conghoa

conghoa

    biết lệnh divide

  • Members
  • PipPipPipPipPipPip
  • 446 Bài viết
Điểm đánh giá: 91 (tàm tạm)

Đã gửi 26 March 2017 - 12:23 AM

 

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


  • 1

#11 Nad SK

Nad SK

    biết vẽ spline

  • Members
  • PipPip
  • 90 Bài viết
Điểm đánh giá: -4 (bình thường)

Đã gửi 26 March 2017 - 06:45 AM

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.


  • 0

#12 quocmanh04tt

quocmanh04tt

    biết lệnh adcenter

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

Đã gửi 26 March 2017 - 09:56 AM

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ự.


  • 1