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

Nhờ Sửa Lsp Giúp

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

Chào các bạn trên diễn đàn cadviet.com!

Mình có sưu tầm được 1 lisp trên diễn đàn (không nhớ rõ tên tác giả) dùng để sửa đối tượng text tăng dần. Tuy nhiên lisp này còn 1 hạn chế là không bắt đầu được số đầu tiên, ví dụ ta có dãy số:

08200, 08200, 08200

Bây giờ ta muốn nó tăng dần thành: ABC00, ABC01, ABC02

Nhưng nó chỉ tăng dần là: ABC01, ABC02, ABC03

è Không bắt đầu được từ 0 hoặc 00

Mình xin cảm ơn các bạn trước!

Mình gởi hình để các bạn tham khảo nha! 



(defun c:td (/ kw ss str n)
(prompt "\nSua tex tang dan(TD)")
  (initget "T D")
  (if (and
	(if (setq kw (getkword "\nTren xuong/Duoi len[T/D]<T>: ")) kw (setq kw "T"))
	(setq ss (ssget '((0 . "*TEXT"))))
      )
    (progn
      (setq str (getstring "\nNhap chuoi: "))
      (setq ss
	     (vl-sort (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))

		      '(lambda (x y)
			 (> (cadr (cdr (assoc 10 (entget x))))
			    (cadr (cdr (assoc 10 (entget y))))
			 )
		       )
	     )
      )
      (if (= kw "D")(setq ss (reverse ss)))
      (setq n 1)
      (foreach e  (mapcar 'vlax-ename->vla-object ss)
	(vla-put-textstring e (strcat (substr str 1 (- (strlen str) 1)) (itoa n)))
	(setq n (1+ n))
	)
    )
  )
  (princ)
  )

 

125368_untitled.jpg

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

Lisp này không "hạn chế" như bạn nói, bởi đã bắt đầu đúng quy luật là con số 1.

Sửa cho bạn bắt đầu bằng con số 0 rồi mai mốt có kẻ dèm pha sao không bắt đầu bằng số -1 thì bạn tính sao?

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ếu không tùy biến thì thử thay (setq n 1) thành (setq n 0) xem sao...!

Thanks bạn quocmanh04tt!

Nhưng không được bạn ơi, nếu thay (setq n 1) thành (setq n 0thì nó lại bắt đầu là 0.

Ý của mình ở đây là: Số đầu tiên mình muốn tăng dần là do mình quy định(chứ không phải mặc định là bắt đầu là 0 hay 1)

Ví dụ: mình muốn nó tăng lên từ 0->5 hoặc 2-> 5 hoặc 1->5(số bắt đầu do mình tự quyết)

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ẳng phải là câu của mình là "Nếu không tùy biến" đó sao??? Và cũng đúng với bài #1 của bạn.

Chắc bạn hiểu nhầm ý mình rồi. 

Ý của mình ở đây là: Số đầu tiên mình muốn tăng dần là do mình quy định(chứ không phải mặc định là bắt đầu là 0 hay 1)

Ví dụ: mình muốn nó tăng lên từ 0->5 hoặc 2-> 5 hoặc 1->5(số bắt đầu do mình tự quyết)

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ếu bạn quocmanh04tt bó tay thì chắc ít ai giải quyết được vấn đề này nhỉ! 

Làm gì có chuyện quocmanh04tt hay ai đó bó tay.

Vấn đề là : bạn đã tự cột tay của mình.

 

Đọc kỹ #5 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

Với trình của quocmanh04tt thì dự là chỉ mất 2 phút, trong đó có 1 phút do bàn phím bị kẹt.

Vấn đề là làm sao để ổng sửa chứ kích động và thách thức chỉ sinh ra bạo lự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

Bác Hạ lại kích động với chú quocmanh04tt rồi...!

Với trình của bác Hạ chỉ mất khoảng 1 phút + 1 giây (trong đó có 1 phút + 0.5 giây do cuộc điện thoại gọi đến...) hehe :D

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

Than tới than lui tốn đất của cadviet quá:

(defun c:td (/ kw ss str n)
(prompt "\nSua tex tang dan(TD)")
  (initget "T D")
  (if (and
	(if (setq kw (getkword "\nTren xuong/Duoi len[T/D]<T>: ")) kw (setq kw "T"))
	(setq ss (ssget '((0 . "*TEXT"))))
      )
    (progn
      (setq str (getstring "\nNhap chuoi co dinh: "))
         (setq ss
	     (vl-sort (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))

		      '(lambda (x y)
			 (> (cadr (cdr (assoc 10 (entget x))))
			    (cadr (cdr (assoc 10 (entget y))))
			 )
		       )
	     )
      )
      (if (= kw "D")(setq ss (reverse ss)))
     (setq n (getreal "\nNhap gia tri bat dau : "))
      (foreach e  (mapcar 'vlax-ename->vla-object ss)
	(vla-put-textstring e (strcat str (itoa (fix n))))
	(setq n (+ n 1))
	)
    )
  )
  (princ)
  )

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

 

Than tới than lui tốn đất của cadviet quá:

(defun c:td (/ kw ss str n)
(prompt "\nSua tex tang dan(TD)")
  (initget "T D")
  (if (and
	(if (setq kw (getkword "\nTren xuong/Duoi len[T/D]<T>: ")) kw (setq kw "T"))
	(setq ss (ssget '((0 . "*TEXT"))))
      )
    (progn
      (setq str (getstring "\nNhap chuoi co dinh: "))
         (setq ss
	     (vl-sort (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))

		      '(lambda (x y)
			 (> (cadr (cdr (assoc 10 (entget x))))
			    (cadr (cdr (assoc 10 (entget y))))
			 )
		       )
	     )
      )
      (if (= kw "D")(setq ss (reverse ss)))
     (setq n (getreal "\nNhap gia tri bat dau : "))
      (foreach e  (mapcar 'vlax-ename->vla-object ss)
	(vla-put-textstring e (strcat str (itoa (fix n))))
	(setq n (+ n 1))
	)
    )
  )
  (princ)
  )

Thanks bạn duy782006 nhiều! Nhưng mình có vài ý thế này?

1/ Mình muốn tăng từ dãy số S00 đến S15, tuy nhiên nó tăng được từ S00 đến S015

(từ S10 trở đi thì không nên có số 0 phía trước)

Ví dụ: tăng S00->S15 thì ok

tăng từ S00->S015 thì chưa ok

Từ số 10 trở đi thì không nên có số 0 ở đầu(lsp gốc vẫn bị hạn chế chỗ này)

2/ Nếu bỏ qua luôn bước: 

Nhap chuoi so co dinh: thì ok hơn(được thì tốt lắm, còn không cũng không sao)

Thanks 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

Lần này nửa thôi đấy!

 (defun c:td (/ kw ss str n)
(prompt "\nSua tex tang dan(TD)")
  (initget "T D")
  (if (and
	(if (setq kw (getkword "\nTren xuong/Duoi len[T/D]<T>: ")) kw (setq kw "T"))
	(setq ss (ssget '((0 . "*TEXT"))))
      )
    (progn
      (setq str (getstring "\nNhap chuoi co dinh: "))
         (setq ss
	     (vl-sort (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))

		      '(lambda (x y)
			 (> (cadr (cdr (assoc 10 (entget x))))
			    (cadr (cdr (assoc 10 (entget y))))
			 )
		       )
	     )
      )
      (if (= kw "D")(setq ss (reverse ss)))
     (setq n (getint "\nNhap gia tri bat dau : "))
      (foreach e  (mapcar 'vlax-ename->vla-object ss)

(cond
((< n 10) (setq nv (strcat "0" (itoa n))) )
((>= n 10) (setq nv (itoa n)) )
)

	(vla-put-textstring e (strcat str nv))
	(setq n (+ n 1))
	)
    )
  )
  (princ)
  )
 
  • 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

 

Lần này nửa thôi đấy!

 (defun c:td (/ kw ss str n)
(prompt "\nSua tex tang dan(TD)")
  (initget "T D")
  (if (and
	(if (setq kw (getkword "\nTren xuong/Duoi len[T/D]<T>: ")) kw (setq kw "T"))
	(setq ss (ssget '((0 . "*TEXT"))))
      )
    (progn
      (setq str (getstring "\nNhap chuoi co dinh: "))
         (setq ss
	     (vl-sort (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))

		      '(lambda (x y)
			 (> (cadr (cdr (assoc 10 (entget x))))
			    (cadr (cdr (assoc 10 (entget y))))
			 )
		       )
	     )
      )
      (if (= kw "D")(setq ss (reverse ss)))
     (setq n (getint "\nNhap gia tri bat dau : "))
      (foreach e  (mapcar 'vlax-ename->vla-object ss)

(cond
((< n 10) (setq nv (strcat "0" (itoa n))) )
((>= n 10) (setq nv (itoa n)) )
)

	(vla-put-textstring e (strcat str nv))
	(setq n (+ n 1))
	)
    )
  )
  (princ)
  )
 

Nhờ vã hoài mình cũng ngại lắm chứ!

Thanks bạn duy782006! 

Lsp bạn viết sửa lại khắc phục được lỗi trên, nhưng có vấn đề này ở bước:

Nhap gia tri bat dau:

Nó cho ra là 2 số nên cũng bất tiện cho những list có số thứ tự tăng dần từ:

Ví dụ: 

1/ Có những bản vẽ họ đánh STT từ: S00->S15 thì ok

2/ Có những bản vẽ họ đánh STT từ: S01->S16 thì cũng ok

3/ Tuy nhiên có những bản vẽ họ đánh STT từ: S0->S15 hoặc S1->S16 thì lại bất ổn(có người muốn 2 số thập phân, nhưng có người lại muốn 1 số thập phân)

 

  • Vote giảm 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ấn đề là bạn là người nào? 1 số cũng chưa ok. 2 số cũng chưa ok.

Bạn ko cần ngại đâu vì tôi sẽ giữ lời hứa của mình.

  • 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


×