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

[Yêu cầu] Lisp insert field file name bỏ đi một số ký tự

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

Gửi mọi người

Mình có 1 yêu cầu nho nhỏ mong mọi người giúp đỡ với.

Hiện tại mình có 1 file cad mình đặt tên là: ABC-XXX-C1

Nhưng mình chỉ muốn lấy insert field cho filename chỉ là: ABC-XXX tức là bỏ đi 3 ký tự cuối.

Mong mọi người giúp đỡ cái. Thank.

"chắc đề cũng rõ rồi, không phải chụp hình nữa chứ chủ thớ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

=)) nửa đêm đọc bài này của bạn chủ thớt cười như điên!

Bạn Chủ thớt đâu rồi, mau vào giúp đỡ bạn chủ thớt đi =))

 

có fải bài này được tách ra từ topic khác không nhỉ? :lol:

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

Vinh dự nhá ^^

http://www.cadviet.com/forum/index.php?showtopic=15687&view=findpost&p=197113

 

Về yêu cầu của bạn thì đây :

(defun c:test()(vl-load-com)
(vla-addmtext (vla-get-block (vla-get-activelayout(vla-get-activedocument (vlax-get-acad-object))))
           	(vlax-3d-point (getpoint "\nDiem chen Field"))
           	1
           	(strcat "%<$(substr, $(getvar, dwgname), 1 ,$(-, $(strlen, $(getvar, dwgname))," (itoa (getint "\nSo ky tu muon cat bot:")) ")) >%")
))

  • 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

Dear Moderator,

 

Nhờ bạn chỉnh dùm mình được ko. Cũng tương tự như ngbmanh, nhưng giả sử file của mình có số kí tự thay đổi, mình muốn lấy 1 vài ký tự tính từ bên trái (giả sử lấy 4 ký tự 21-22-23-24) thì như thế nào

Thanks bạn nhiều

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

Ý mình là kí tự thứ 23-24-25-26

Ví dụ: Mình có các file là :

ABC-XXXX-1-AS-RP-TP3-1221-00 Report of weight

ABC-XXXX-1-AS-RP-TP3-1268-00 Detail and Layout

ABC-XXXX-1-AS-RP-TP3-1297-00 Calculation

 

 

Giờ mình muốn lấy field của 1221-00 hoặc 1268-00 hoặc 1397-00 ấy, bạn giúp mình nhé

Thanks bạn nhiều

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

10 ngày rồi bạn mới ngó lại hén ^^ Dấu của bạn đâu ?

Bạn thử sửa dòng (strcat.....) thành :

(strcat "%<$(substr, $(getvar, dwgname)," (itoa (setq a (getint "\nBat dau tu so:"))) "," (itoa (getint "\nSo ky tu :")) ")>%")

xem có đúng không.

Srr vì mình ngồi máy k có CAD nên không test được

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

K được là k đc thế nào ?

Mình chỉ thấy nó tự quy định ký tự đầu là dấu " ", cò chẳng thấy k được chỗ nào. Chủ đề đã trả lời cách đây 9 ngày, chả hiểu bạn có cần thật hay thích thì hỏi

(defun c:test()(vl-load-com)
(vla-addmtext (vla-get-block (vla-get-activelayout(vla-get-activedocument (vlax-get-acad-object))))
    		(vlax-3d-point (getpoint "\nDiem chen Field"))
    		1
    		(strcat "%<$(substr, $(getvar, dwgname)," (itoa (1+ (setq a (getint "\nBat dau tu so:")))) "," (itoa (getint "\nSo ky tu :")) ")>%")
))

Nói luôn là diễn đàn k đồng tình việc tạo 2 hoặc nhiều nick để hút máu mọi người đâu. Bạn có thắc mắc thì cứ hỏi, ai cũng hỏi cả mà, không việc chi phải thay tên đổi nick bạn ạ :)

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

Dear bạn,

 

Thanks bạn nhiều, mình đã thử lại và đã ok. Sorry bạn vì gần đây mình phải đi công tác liên tục nên ko thường xuyên vào diễn đàn được. Thực sự là mình đang rất cần Lisp này để set-up 1 số form trong công việc bạn ạ. Thanks bạn 1 lần nữa nhé!

(À, mình chỉ có 1 nick này thôi bạn ạ, ko còn nick thứ 2 nữa đâu) Thanks so much!

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

Mình cũng tương tự, muốn lấy tên của Layer bỏ đi một số ký tự đầu tiên thì làm sao hả bạn? Ví dụ tên layer là "abc123" thì chỉ lấy "123" 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

Dạ, yêu cầu thế này bác ạ:

- Chỉ lên một đối tượng để lấy tên layer

- Cắt đầu nó n ký tự

- Đè lên một cái text có sẵn

Cám ơn bác Hạ!

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

Bạn tự sử dụng Field Layer để phát hiện ra công thức, sau đó tìm hàm GetObjectID64 trên diễn đàn, strcat cái công thức + ObjectID ghi đè lên text, thế là có cái bạn cần, bạn thử làm xem sao :) Mình đoán mất mấy phút thôi ^^

  • 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

Dạ, yêu cầu thế này bác ạ:

- Chỉ lên một đối tượng để lấy tên layer

- Cắt đầu nó n ký tự

- Đè lên một cái text có sẵn

Cám ơn bác Hạ!

(defun C:HA( / num ent1 ent2 lay)
(initget 7) (setq num (getint "\nSo ky tu can cat bot: "))
(while
 (and
  (setq ent1 (car (entsel "\nChon 1 doi tuong de lay Layer: ")))
  (setq ent2 (car (entsel "\nChon 1 Text de ghi len no: "))))
 (if (> (strlen (setq lay (cdr (assoc 8 (entget ent1))))) num)
  (vla-put-textstring (vlax-ename->vla-object ent2) (substr lay (1+ num))))))

  • 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

Thật tình mình không rành về các hàm VBA. Lần trước về tên file, mình thấy ketxu lập bằng diesel, cái này thì mình biết. Nhưng diesel không lấy thông tin của đối tượng được! Mình sẽ tìm hiểu sau vậy, tạm thời bây giờ mong được các bác giúp đỡ, xin cám ơn nhiều! :)

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:HA( / num ent1 ent2 lay)
(initget 7) (setq num (getint "\nSo ky tu can cat bot: "))
(while
 (and
  (setq ent1 (car (entsel "\nChon 1 doi tuong de lay Layer: ")))
  (setq ent2 (car (entsel "\nChon 1 Text de ghi len no: "))))
 (if (> (strlen (setq lay (cdr (assoc 8 (entget ent1))))) num)
  (vla-put-textstring (vlax-ename->vla-object ent2) (substr lay (1+ num))))))

 

Cám ơn bác Hạ! Mình muốn text này liên kết động với tên layer được không bác? Nghĩa là lúc mình đổi tên layer thì nó cũng thay đổi theo ấ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

Thật tình mình không rành về các hàm VBA. Lần trước về tên file, mình thấy ketxu lập bằng diesel, cái này thì mình biết. Nhưng diesel không lấy thông tin của đối tượng được! Mình sẽ tìm hiểu sau vậy, tạm thời bây giờ mong được các bác giúp đỡ, xin cám ơn nhiều! :)

Sao lại hàm VBA ở đây bạn ^^ Bạn đã thử như mình nói chưa ? Và bạn dùng Field chưa (Field -> Object -> Select Object -> Property Layer )

Cấu trúc đoạn string sẽ dạng này :

 

%<\AcObjProp Object(%<\_ObjId 2130326624>%).Layer>%

  • 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

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

×