Đến nội dung


Hình ảnh
- - - - -

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


  • Please log in to reply
6 replies to this topic

#1 anhsaoxanh222

anhsaoxanh222

    biết vẽ line

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

Đã gửi 08 August 2012 - 06:08 PM

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
  • 0

#2 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 08 August 2012 - 10:25 PM

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

  • 1

#3 anhsaoxanh222

anhsaoxanh222

    biết vẽ line

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

Đã gửi 09 August 2012 - 10:00 AM

Bác Tue_NV có thể giúp em thêm đoạn code đổi màu những text đã thay thành màu số 1 thế được không ạ. Cảm ơn bác :)
  • 0

#4 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5682 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 09 August 2012 - 10:21 AM

:)


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

  • 1

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#5 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 09 August 2012 - 11:48 AM

:)



(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
  • 1

#6 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5682 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 09 August 2012 - 12:01 PM

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
  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#7 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 09 August 2012 - 02:25 PM

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.... :)
  • 0