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

[Yêu cầu] Lisp tìm và thay thế nhiều text cùng lúc.

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

Chào các bác!

Hiện giờ em đang có 1 file cad và 1 file txt chứa số liệu. Em muốn nhờ các bác viết hộ em lisp có thể truy xuất số liệu từ file txt từ đó tìm và thay thế nhiều text bên cad cùng lúc . Nếu đối tượng nào bên cad không có thì bỏ qua, cái nào có thì thay thế đối tượng tương ứng. Text có thể là Dtext hoặc Mtext. Mong các bác nhiệt tình giúp đỡ. Cảm ơn các bác nhiều.

http://www.cadviet.com/upfiles/3/81930_text.rar

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

Chào các bác!

Hiện giờ em đang có 1 file cad và 1 file txt chứa số liệu. Em muốn nhờ các bác viết hộ em lisp có thể truy xuất số liệu từ file txt từ đó tìm và thay thế nhiều text bên cad cùng lúc . Nếu đối tượng nào bên cad không có thì bỏ qua, cái nào có thì thay thế đối tượng tương ứng. Text có thể là Dtext hoặc Mtext. Mong các bác nhiệt tình giúp đỡ. Cảm ơn các bác nhiều.

http://www.cadviet.c.../81930_text.rar

Code đây bạn :

(defun c:gf(/ ename ss i j lst str str-r find str-b ass doc f file)
(vl-load-com)
(setq file (getfiled "Chon file txt :" ""  "txt" 0) f (open file "r") j -1)
(if (setq ss (ssget '((0 . "*TEXT"))))
(Progn
 (while (setq doc (read-line f))
(setq str (vl-string-trim "\t" doc))
(setq find (substr str 1 (setq str-b (vl-string-search "\t" str))) str-b (1+ str-B) i (1+ str-B))
(while (setq str-b (vl-string-search "\t" str str-B))
 	(if (= (substr str (1+ str-B) 1) "\t") (setq str-b (1+ str-B) i (1+ str-B)))
)
(setq str-r (substr str i (- (strlen str) i -1)))
(setq lst (cons (cons find str-r) lst))
 )
(close f)
(while (setq ename (ssname ss (setq j (1+ j))))
  (if (setq ass (assoc (cdr(assoc 1 (entget ename))) lst))
(entmod (subst (cons 1 (cdr ass)) (assoc 1 (entget ename)) (entget ename)))
  )
)
)
)
)

  • 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

:)


(defun c:gf(/ e ass j lst doc f file)
(vl-load-com)
(while (not (setq file (getfiled "Chon file txt :" ""  "txt" 0))) )
(cond ((setq ss (ssget '((0 . "*TEXT"))) f (open file "r") j -1)
(while (setq doc (read-line f))
(setq lst (cons (apply 'cons (mapcar 'vl-princ-to-string (read (strcat "(" doc ")")))) lst))
)
(close f)
(while (setq e (ssname ss (setq j (1+ j))))
(if (setq ass (assoc (cdr (assoc 1 (entget e))) lst))
(entmod (list (cons -1 e)(cons 62 1)(cons 1 (cdr ass))))
)
)
)))

  • 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

:)


(defun c:gf(/ e ass j lst doc f file)
(vl-load-com)
(while (not (setq file (getfiled "Chon file txt :" ""  "txt" 0))) )
(cond ((setq ss (ssget '((0 . "*TEXT"))) f (open file "r") j -1)
(while (setq doc (read-line f))
(setq lst (cons (apply 'cons (mapcar 'vl-princ-to-string (read (strcat "(" doc ")")))) lst))
)
(close f)
(while (setq e (ssname ss (setq j (1+ j))))
(if (setq ass (assoc (cdr (assoc 1 (entget e))) lst))
(entmod (list (cons -1 e)(cons 62 1)(cons 1 (cdr ass))))
)
)
)))

Tue_NV ít khi sử dụng hàm read trong trường hợp này

Nếu chuỗi find có chứa "." thì sai rồi

Ex: (read "134.1/1") -> 134

  • 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

Trường hợp này thì không có bác ạ ^^ Cáu trúc file của bạn ấy như vậy nên linh động thô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

Trường hợp này thì không có bác ạ ^^ Cáu trúc file của bạn ấy như vậy nên linh động thôi

May thay là không có.... chứ có rồi thì.......

Có trường hợp để tâm, có trường hợp không biết, có TH vô tì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

Xin chào bạn Tue_NV,

 

lisp của bạn rất hay, cám ơn bạn! Bạn có thể nâng cấp lisp này lên thêm được không, mình muốn tìm và thay thế một giá trị nằm trong một khoảng nào đó, vd muốn tìm số lớn hơn 0.2 và nhỏ hơn hay bằng 0.5 và thay bằng số A1 chẳng hạn, tìm số lớn hơn 0.5 và nhỏ hơn hay bằng 0.8 và thay bằng A2...vd như vậy, bạn giúp mình được không.

Thanks!

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
Vào lúc 13/8/2019 tại 08:43, tientracdia đã nói:

Mình có 1 file txt và file Cad. Muốn sử dụng lisp trên để thay thế của file txt vào Cad, nhưng không thay thế được.

Mong được bạn giúp.

SO TT O.dwg

SO TT O.dwg

 

48 phút trước, tientracdia đã nói:

hehe .... buon qua khong ai cuu

 

Quá buồn cho cái yêu cầu 

Copy cái này bỏ qua cái kia là xong

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

Không hiểu bạn đang nói gì ...

Cũng giống như bạn mình cũng không thấy file text nó như thế nào vậy??? Thấy 2 file cad thì copy thay cho nhau thô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

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  

×