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

Lisp Lọc Text Dạng Số Ra Khỏi Chuỗi Text

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

Lisp không hỗ trợ Unicode bạn ạ, như chữ "tờ 1" là mã "t\U+1EDD 1"  vậy bạn tách số ra khỏi chữ sẽ được 2 chữ số "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
Vào lúc 19/7/2019 tại 14:27, google123 đã nói:

Anh ơi dữ liệu của em giờ thêm đối tượng này nữa anh có thể sửa thêm vào lisp được không anh..

-tờ    số   x  (tỷ lệ 1:200)

-tờ    số   x  (tỷ lệ 1:500)

-tờ    số    x  (tỷ lệ 1:1000)

- tờ   thứ      x

em gửi lại dữ liệu ạ:

 

19-07-2019_1.dwg

Chưa rõ bạn muốn sửa lại như nào?

-tờ    số   x  (tỷ lệ 1:200)  ---> thành  x hay x  (tỷ lệ 1:200)

- tờ   thứ      x                     ---> thành  x

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
1 giờ} trướ}c, Biet ve CAD đã nói:

Chưa rõ bạn muốn sửa lại như nào?

-tờ    số   x  (tỷ lệ 1:200)  ---> thành  x hay x  (tỷ lệ 1:200)

- tờ   thứ      x                     ---> thành  x

Từ từ đừng vội. Bạn ấy chưa nói hết đâu. Trong file còn có cả quận hay huyện chi chi đó nửa. Rồi lại thì có cái text thì 1 hàng lại có cái 2 hàng. Nói chung mình phải tự dò, mò, đoán quy luật chứ bạn ấy hông nói đâu. Hỏi nhiều khéo bị la cho thì thêm bực người

 

  • Like 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
14 giờ trước, Biet ve CAD đã nói:

Chưa rõ bạn muốn sửa lại như nào?

-tờ    số   x  (tỷ lệ 1:200)  ---> thành  x hay x  (tỷ lệ 1:200)

- tờ   thứ      x                     ---> thành  x

em chỉ lấy x thôi anh, vì em không có kiến thức của code lisp nên không biết sửa ra sao, nếu anh có sửa thì chỉ em sửa chỗ nào đê về sau em tự sửa a 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
1 giờ} trướ}c, google123 đã nói:

em chỉ lấy x thôi anh, vì em không có kiến thức của code lisp nên không biết sửa ra sao, nếu anh có sửa thì chỉ em sửa chỗ nào đê về sau em tự sửa a nhé

Bạn copy vào lisp cũ nhé, nhũng text nào ko chạy đúng bạn sửa lại đúng theo các text mẫu của bạn

(vl-load-com)
(defun C:BVC( / e str)
 (foreach e (acet-ss-to-list (ssget '((0 . "text"))))
   (setq str (cdr (assoc 1 (entget e))))
   (if(vl-string-search "T\\" str)
     (progn
       (setq str(vl-string-subst "" "T\\U+1EDD" str)
         str(vl-string-subst "" "s\\U+1ED1" str)
         str(vl-string-subst "" " " str)
         )
       (if(vl-string-search "(t" str)(setq str (vl-string-subst "" (substr str (+(vl-string-search "(t" str)1)) str)))
       (vla-put-textstring (vlax-ename->vla-object e) str)
       )
     )
   )
  )

  • Like 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 duy:xd_listngngancach<kytub (chuoi kytu / chuoi kytu ckq) 
(setq lkq nil)
(setq bdd 1) 
(setq b 1)
(setq l (fix (strlen chuoi)))
(repeat l
(setq a (substr chuoi b 1))
(cond
((= a kytu) 
(setq dkt (substr chuoi bdd (- b bdd)))
(cond
((/= dkt "")
(setq lkq (append lkq (list dkt)))
))
(setq bdd (+ b 1)) 
)
)
(setq b (+ b 1))
)
(setq dkt (substr chuoi bdd (+ (- l bdd) 1)))
(setq lkq (append lkq (list dkt)))
lkq)
;;;;;;;;;;;;;;;;
(defun c:layso ()
(command "undo" "be")
(setq sb (ssget (list (cons 0 "TEXT"))))
(setq SUMb 0)
(setq im 0)
(setq N (sslength sb))
(while (< im N)
(setq nddd (cdr (assoc 1 (entget (ssname sb im))))) 
(setq kqthay (duy:xd_listngngancach<kytub nddd " "))
(setq ndddau (nth 0 kqthay))
(setq ktdt (substr ndddau 1 1))
(cond
((= ktdt "T")
(setq kqthaym (nth 2 kqthay))
(cond
((/= ktdt nil)
(setq DTMs (subst (cons 1 kqthaym) (assoc 1 (entget (ssname sb im))) (entget (ssname sb im))))
(entmod DTMs)
))

))
(setq im (1+ im))
)
(command "undo" "end")
(princ)
)

Thử phát xem sao. Lệnh LAYSO.

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

Có 1 góp ý nhỏ cho anh @duy782006 là:

Rất nhiều hàm cơ bản anh viết để làm thư viện mà không khử biến địa phương đầy đủ thì sẽ có 1 lúc nào đó anh ghép các hàm này vào một lisp dễ xãy ra lỗi.

  • Like 2

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 24/7/2019 tại 11:28, Biet ve CAD đã nói:

Bạn copy vào lisp cũ nhé, nhũng text nào ko chạy đúng bạn sửa lại đúng theo các text mẫu của bạn

(vl-load-com)
(defun C:BVC( / e str)
 (foreach e (acet-ss-to-list (ssget '((0 . "text"))))
   (setq str (cdr (assoc 1 (entget e))))
   (if(vl-string-search "T\\" str)
     (progn
       (setq str(vl-string-subst "" "T\\U+1EDD" str)
         str(vl-string-subst "" "s\\U+1ED1" str)
         str(vl-string-subst "" " " str)
         )
       (if(vl-string-search "(t" str)(setq str (vl-string-subst "" (substr str (+(vl-string-search "(t" str)1)) str)))
       (vla-put-textstring (vlax-ename->vla-object e) str)
       )
     )
   )
  )

image.png.942113104659658f758e9c4fa7673c53.png

em copy nó báo lỗi này anh...

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

copy đoạn sau của Biet ve CAD

(vl-load-com)
(defun C:BVC( / e str)
 (foreach e (acet-ss-to-list (ssget '((0 . "text"))))
   (setq str (cdr (assoc 1 (entget e))))
   (if(vl-string-search "T\\" str)
     (progn
       (setq str(vl-string-subst "" "T\\U+1EDD" str)
         str(vl-string-subst "" "s\\U+1ED1" str)
         str(vl-string-subst "" " " str)
         )
       (if(vl-string-search "(t" str)(setq str (vl-string-subst "" (substr str (+(vl-string-search "(t" str)1)) str)))
       (vla-put-textstring (vlax-ename->vla-object e) str)
       )
     )
   )
  ) 

 

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 24/7/2019 tại 15:00, duy782006 đã nói:

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(Defun duy:xd_listngngancach<kytub (chuoi kytu / chuoi kytu ckq) 
(setq lkq nil)
(setq bdd 1) 
(setq b 1)
(setq l (fix (strlen chuoi)))
(repeat l
(setq a (substr chuoi b 1))
(cond
((= a kytu) 
(setq dkt (substr chuoi bdd (- b bdd)))
(cond
((/= dkt "")
(setq lkq (append lkq (list dkt)))
))
(setq bdd (+ b 1)) 
)
)
(setq b (+ b 1))
)
(setq dkt (substr chuoi bdd (+ (- l bdd) 1)))
(setq lkq (append lkq (list dkt)))
lkq)
;;;;;;;;;;;;;;;;
(defun c:layso ()
(command "undo" "be")
(setq sb (ssget (list (cons 0 "TEXT"))))
(setq SUMb 0)
(setq im 0)
(setq N (sslength sb))
(while (< im N)
(setq nddd (cdr (assoc 1 (entget (ssname sb im))))) 
(setq kqthay (duy:xd_listngngancach<kytub nddd " "))
(setq ndddau (nth 0 kqthay))
(setq ktdt (substr ndddau 1 1))
(cond
((= ktdt "T")
(setq kqthaym (nth 2 kqthay))
(cond
((/= ktdt nil)
(setq DTMs (subst (cons 1 kqthaym) (assoc 1 (entget (ssname sb im))) (entget (ssname sb im))))
(entmod DTMs)
))

))
(setq im (1+ im))
)
(command "undo" "end")
(princ)
)

Thử phát xem sao. Lệnh LAYSO.

(cond
((= ktdt "T")
(append(= ktdt "t"))
(setq kqthaym (nth 2 kqthay))
(cond
((/= ktdt nil)

đoạn này giờ em muốn sửa thành cho cả trường hợp chữ t thường như thế này mà sao lisp không chạy anh

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  

×