Chuyển đến nội dung
Diễn đàn CADViet
Hòa197

Copy số thứ tự tăng dần

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

Mọi người cho em hỏi, em làm lisp copy số thứ tự tăng dần nhưng khi copy đến số 99 thì nó nhảy lên 910, 911,... Các bác biết cách nào khác phục để từ 99 lên 100, 101 không ạ

 

;;;************SAO CHEìP THEO SÔì THÝì TÝò TÃNG DÂÌN*************************
(defun ketthuc ()
    (setvar    "cmdecho"    luuecho)
    (setq *error*    luu
        luu        nil    
        luuecho    nil
    );setq
    (princ)
)        
;*********************************************************************
(defun modau ()
(setq     luu *error
        luuecho    (getvar    "cmdecho")
        *error    (ketthuc)
)
)
;*********************************************************************
(defun xulytext (text / kytu ma sokt luusokt lui )
(setq     kytu    (substr text (strlen text))
        ma    (ascii kytu)
        sokt    (read kytu) 
        lui    1
)
(if (numberp sokt)
        (progn
            (setq luusokt    (1+ sokt))
            (if (and     (numberp sokt) 
                    (> (strlen text) 1)
                )    
               (progn
                (setq     kytu    (substr text (1- (strlen text)))
                        sokt    (read kytu) 
                                        )
                (if     (numberp sokt) 
                    (setq luusokt (1+    sokt)
                            lui     2

                        )
                )
                );progn    
            )
            (if (= luusokt    100)    (setq     luusokt    0))
            (setq     kytu        (rtos luusokt 2 0)
                    
                    text    (strcat    (substr text 1 (- (strlen text) lui))  kytu)
            )
        );progn             
        (if   (or     (= kytu "z")
                (= kytu "Z")
            )
            (setq     text        (strcat     text    "0")
                textxl        "0"
            )
            (setq        ma    (1+    ma)
                    text    (strcat    (substr text 1 (1- (strlen text)))  (chr ma))
            )
        );if
);if
)
;*********************************************************************
(defun doitext(tendoituong / chuoi doituong thoat tam dsach kieu text vitri10 vitri11 dem canle)
;Neu doi tuong la text thi tiep tuc
(setq     doituong     (entget  tendoituong)
    kieu        (cdr (assoc     0    doituong))
    canle        (cdr (assoc     72    doituong))
)    
(if (or (= kieu        "TEXT")
    (= kieu     "MTEXT")    
    )     
    (progn
        (setq    textxl    (xulytext textxl)
            text    (cons 1 textxl)
            vitri10     (cdr (assoc 10 doituong))
            vitri10     (list (+ (car vitri10) (car vitrilech)) (+ (nth 1 vitri10) (nth 1 vitrilech)))
            vitri10        (cons 10 vitri10)
            vitri11     (cdr (assoc 11 doituong))
            vitri11     (list (+ (car vitri11) (car vitrilech)) (+ (nth 1 vitri11) (nth 1 vitrilech)))
            vitri11        (cons 11 vitri11)
            dem    0
            dsach    nil
        )
        (foreach tam     doituong
            (cond
                ((= (car tam)    1)    (setq dsach     (append dsach (list text))))
                ((= (car tam)    10)    (setq dsach     (append dsach (list vitri10))))
                ((= (car tam)    11)    (setq dsach     (append dsach (list vitri11))))
                ((setq dsach     (append dsach (list tam))))
            )
        )
        (entmake dsach)
    );progn
);if
    );
;*********************************************************************
;sao doi tuong cu sang vi tri moi

(defun copy_dt (tendoituong )
(command "copy" tendoituong "" goc toi )
);defun

;*********************************************************************
(defun c:CF ( / cumdt dodai thoat dem ten doituong textxl dem goc toi)
; Khoi dau cua chuong trinh
(princ "\nChon diem can sao chep!\n")
(setq     luuecho    (getvar    "cmdecho")
    luu    *error*
    *error*    ketthuc
    cumdt     (ssget)
    dodai     (sslength cumdt)
    goc        (getpoint "\nChon diem dat ghi:")
    thoat        nil
    dem        0
    textxl        nil
);
(setvar "cmdecho" 0)
; Loc ra duoc ong text de xu ly
(while    (and     (= thoat    nil)
        (< dem    dodai)
    )
    (setq     ten    (ssname cumdt dem)
        dem    (1+     dem)
        doituong (entget ten)
        kieu     (cdr (assoc     0    doituong))            
    )
    
    (if (or (= kieu        "TEXT")
        (= kieu     "MTEXT")    
            )
        (setq     thoat    T
            textxl     (cdr (assoc 1 doituong))     
        )
    )
);
(while T 
(setq    toi        (getpoint "\nChon diem dat ghi:" goc)
    vitrilech     (list     (- (car toi) (car goc)) (- (nth 1 toi) (nth 1 goc)))
    dem        0
)
(while    (< dem dodai)
    (setq     ten    (ssname cumdt dem)
        dem    (1+     dem)
        doituong (entget ten)
        kieu     (cdr (assoc     0    doituong))            
    )

    (if (or (= kieu        "TEXT")
        (= kieu     "MTEXT")    
            )
        (doitext    ten)
        (copy_dt    ten)

    );if
)
);while
(ketthuc)
);defun

z5985009252311_325a17ceb8e2f9a3fce89165096ff5ad.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

(itoa (1+ (atoi "123")))

dễ hơn rất nhiều cái bạn vừa viết.

 

Kể cho bạn 1 hàm có sẵn của lisp rất tiện.

(vl-string-right-trim char-set<string> str<string>)

ví dụ muốn xóa số đằng sau 1 đoạn ký tự

(vl-string-right-trim "0123456789" "DL-123")

kết quả trả về "DL-"

dùng substr để lấy cái "123" ra 

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

×