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

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  

×