Đến nội dung


Hình ảnh
- - - - -

[Yêu cầu] Xin lisp cắt ký tự trong text cad


  • Please log in to reply
3 replies to this topic

#1 victor85

victor85

    biết lệnh stretch

  • Members
  • PipPipPip
  • 169 Bài viết
Điểm đánh giá: 10 (tàm tạm)

Đã gửi 01 August 2014 - 09:58 AM

Trong quá trình vẽ mình có hay gặp trường hợp xử lý chuỗi ký tự trong text nhưng vượt quá tầm kiểm soát của lệnh FIND trong cad. Mình hy vọng autolisp có thể giải quyết đc trường hợp của mình, mình cũng xin kính nhờ các lisper xuống tay giúp đỡ.

Cụ thể lisp như sau:

 

Mình có 1 bộ các text cad có định dạng các ký tự như sau: Text thứ nhất = "123 xyz abcd" ; Text thứ hai = "346 xyz ab" ; Text thứ ba = "123 xxx bac" ; (Với dấu cách "space" trong text cũng coi là 1 ký tự của text)

Lisp trim_text.lsp

Lệnh đầu vào: trt -> Enter

Chọn các đối tượng text đầu vào: Chọn đối tượng -> Enter

Chọn phương pháp cắt text:   Cắt phần bên trái (T) / Cắt phần bên phải (P) -> nhập T hoặc P -> Enter

Nhập số ký tự text mong muốn cắt đi: Ví dụ nhập số 04 -> Enter

Kết quả: ra các text mong muốn đã cắt đi phần ký tự thừa. Ở VD trên sau khi nhập cắt đi 04 ký tự phần bên trái thì các text kết quả mong muốn nhận đc là: "xyz abcd" ; "xyz ab" ; "xxx bac".

Tương tự cho trường hợp lựa chọn cắt phần bên phải của text ạ.

 

Kính mong các bro giúp mình với. Mình xin cảm ơn các bro trước ạ.


  • 0

#2 victor85

victor85

    biết lệnh stretch

  • Members
  • PipPipPip
  • 169 Bài viết
Điểm đánh giá: 10 (tàm tạm)

Đã gửi 01 August 2014 - 10:02 AM

À bổ xung thêm là nếu 1 kí tự có dấu tiếng Việt thì các bác coi như là 1 ký tự nhé. Nếu lisp không giải quyết được với trường hợp có dấu tiếng việt thì các bác cứ viết lisp xử lý trường hợp bình thường cũng được ạ. :)


  • 0

#3 TaiNguyen79

TaiNguyen79

    biết vẽ ellipse

  • Members
  • PipPip
  • 51 Bài viết
Điểm đánh giá: 24 (tàm tạm)

Đã gửi 01 August 2014 - 02:56 PM

Dung thử code này xem :

(defun c:trt (/ key pos k ss te text len kq)
(initget 1 "Left Right") (setq key (getkword "\n<L:Left> <R:Right> "))
(initget 7) (setq pos (getint "\nNhap 1 so nguyen : "))
(prompt "\n Chon cac chu de trim : ")(while (null (setq SS (ssget (list (cons 0 "Text"))))) (princ "\nChua chon duoc !"))
(setq k 0)
(repeat (sslength SS)
(setq te (entget (ssname SS k))) (setq text (cdr (assoc 1 te))) (setq len (strlen text))
(if (< pos len)
(progn
(if (eq key "Right") (setq kq (substr text 1 (- (strlen text) pos))) (setq kq (substr text (+ pos 1))))
(entmod (setq te (subst (cons 1 kq) (assoc 1 te) te)))))
(setq k (1+ k)))
(princ))

  • 1

#4 victor85

victor85

    biết lệnh stretch

  • Members
  • PipPipPip
  • 169 Bài viết
Điểm đánh giá: 10 (tàm tạm)

Đã gửi 04 August 2014 - 05:16 PM

Lisp chạy được rồi nhưng không đúng cho số lượng nhiều đối tượng text tiếng Việt ạ. Dù sao cũng cảm ơn bác lắm lắm ạ. Chúc bác vui khỏe, công tác tốt ạ :)


  • 0