Chuyển đến nội dung
Diễn đàn CADViet
laivanyen

Lisp đổi vị trí text trong cùng 1 dòng

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

Nhờ anh / chị giúp đỡ viết giúp em lisp hoán đổi vị trí text trong cùng 1 dòng dựa trên kí tự phân cách "-":

Ví dụ:  D16a200-14 thành 14-D16a200. Nếu có thể chọn được nhiều text trên cùng 1 bản vẽ thì càng tốt ạ, em cảm ơn !

CadViet.dwg

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
14 phút trước, quang_lac đã nói:

Cái này đâu cần lisp j đâu, dùng lệnh find của cad là được mà

vì  dữ liệu 2 bên dấu “-“ của em rất nhiều loại khác nhau anh ạ

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

Đây

(defun c:test ( / ss i str ent n vitri trai phai )
 (vl-load-com)
  (setq ss (ssget '(( 0 . "TEXT"))))
  (setq n (sslength ss) i 0)
  (while (< i n)
    (progn
       (if
     (setq     ent (entget (ssname ss i))
              str (cdr (assoc 1 ent))
              vitri (vl-string-position (ascii "-") str)     )
    (setq     phai (substr str 1 vitri)
              trai (substr str  (+ vitri 2))
              str (strcat trai "-" phai)
        ent (subst (cons 1 str) (assoc 1 ent) ent)))
    (entmod ent)
    )
  (setq i (1+ i))
     )
  )


 

  • Like 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
(defun c:te (/ ss ent n)
  (if (setq ss (acet-ss-to-list (ssget (list (cons 0 "MTEXT,TEXT"))))) (progn
  (foreach ent ss
    (if  (setq n (vl-string-search "-" (cdr (assoc 1 (entget ent))))) (progn
(entmod (subst (cons 1 (strcat (substr (cdr (assoc 1 (entget ent))) (+ n 2) ) "-"
			       (substr (cdr (assoc 1 (entget ent))) 1 n)))
	       (assoc 1 (entget ent)) (entget ent)))
)))
  (princ)))
  )

Bạn test thử xem được chưa

  • Like 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
20 phút trước, Doan Nguyen Van đã nói:

(defun c:te (/ ss ent n)
  (if (setq ss (acet-ss-to-list (ssget (list (cons 0 "MTEXT,TEXT"))))) (progn
  (foreach ent ss
    (if  (setq n (vl-string-search "-" (cdr (assoc 1 (entget ent))))) (progn
(entmod (subst (cons 1 (strcat (substr (cdr (assoc 1 (entget ent))) (+ n 2) ) "-"
			       (substr (cdr (assoc 1 (entget ent))) 1 n)))
	       (assoc 1 (entget ent)) (entget ent)))
)))
  (princ)))
  )

Bạn test thử xem được chưa

Cám ơn anh, cơ bản text không có gạch chân (%%u) thì đạt kết quả rất tốt . Trường hợp có gạch chân thì sẽ mất 1 vế không còn gạch chân, anh có thể khắc phục được nhược điểm này không giúp em thêm đượ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
5 phút trước, laivanyen đã nói:

Cám ơn anh, cơ bản text không có gạch chân (%%u) thì đạt kết quả rất tốt . Trường hợp có gạch chân thì sẽ mất 1 vế không còn gạch chân, anh có thể khắc phục được nhược điểm này không giúp em thêm được không ạ

Phần gạch chân này bạn muốn nó gạch tất cả hay chỉ gạch 1 vùng, bản vẽ mẫu sao không có phần này ?

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
4 phút trước, Doan Nguyen Van đã nói:

Phần gạch chân này bạn muốn nó gạch tất cả hay chỉ gạch 1 vùng, bản vẽ mẫu sao không có phần này ?

Dạ như hình em gửi trên ạ, do em không dự tính hết các trường hợp ạ. Xin lỗi anh

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
(defun c:te (/ a i ss ent ReplaceString old_str new_str strr )
  (defun ReplaceString (old_str new_str strr / m n)
(setq m 0 n (strlen new_str))
(while (setq m (vl-string-search old_str strr m))
(setq strr (vl-string-subst new_str old_str strr m))
(setq m (+ n m))
)strr )
 (if (setq ss (acet-ss-to-list (ssget (list (cons 0 "TEXT"))))) (progn
  (foreach ent ss
    (setq str (cdr (assoc 1 (entget ent))))
    (if  (vl-string-search "-" str) (progn
(if  (vl-string-search "%%U"  str) 
   	(progn (setq a "%%U")
(setq str (ReplaceString "%%U" "" str))
	  ) (progn
	(setq    a "")))
(setq i (vl-string-search "-" str))
(entmod (subst (cons 1 (strcat a (substr str (+ i 2) ) "-"
			       (substr str 1 i)))
	       (assoc 1 (entget ent)) (entget ent)))
)))
  (princ)))
 )

Cái này chỉ dùng cho trường hợp đổi tất cả text có gạch chéo, không dùng cho trường hợp có gạch chéo 1 vài vị trí text 

  • Like 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
4 giờ trước, Doan Nguyen Van đã nói:

Chắc bác chưa test rồi 

Ý là: Nếu Text ban đầu, gạch chân từ đầu đến hết, sau khi chạy lisp thì gạch chân không còn đầy đủ nữa.

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

×