Đến nội dung


Hình ảnh
- - - - -

[Nhờ chỉnh sửa] Code lisp ghép chuỗi


  • Please log in to reply
15 replies to this topic

#1 NguyenNgocSon

NguyenNgocSon

    biết dimbaseline

  • Members
  • PipPipPipPipPip
  • 368 Bài viết
Điểm đánh giá: 39 (tàm tạm)

Đã gửi 25 March 2012 - 12:44 PM

Em có code lisp sau:

(vla-put-TextString e (itoa(setq i (1+ i)))) ) ))
Giờ em muốn sửa code để thêm 1 ký tự mới vào chuỗi trên như sau:

(vla-put-TextString e (strcat "A" itoa(setq i (1+ i)))) ) )))
Nhưng báo lỗi: error: bad argument type: stringp #<SUBR @084d5384 ITOA>
Nhờ các bác xem giúp?
Cám ơn !
  • 0

#2 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5678 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 25 March 2012 - 01:25 PM

Bạn thiếu dấu ngoặc ( trước hàm itoa
  • 1

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#3 NguyenNgocSon

NguyenNgocSon

    biết dimbaseline

  • Members
  • PipPipPipPipPip
  • 368 Bài viết
Điểm đánh giá: 39 (tàm tạm)

Đã gửi 26 March 2012 - 08:58 AM


;; free lisp from cadviet.com
;;; this lisp was downloaded from http://www.cadviet.com/forum/index.php?showtopic=13203&st=2460
(defun c:dstt (/ doc i ins lst)
(vl-load-com)
(defun sort_lst (lst dk)
(if (= dk "Left")
(vl-sort lst '(lambda (x y)
(or (< (car (cadr x)) (car (cadr y)))
(and (= (car (cadr x)) (car (cadr y)))
(< (cadr (cadr x)) (cadr (cadr y))) )) ))
(vl-sort lst '(lambda (x y)
(or (> (car (cadr x)) (car (cadr y)))
(and (= (car (cadr x)) (car (cadr y)))
(< (cadr (cadr x)) (cadr (cadr y))) )) ))) )

(if (ssget '((0 . "TEXT,mtext")))
(progn
(initget 0 "Left Right")
(setq tp (cond ((getkword (strcat "\nBat dau tu: [Left/Right] <"
(cond (tp) ((setq tp "Right")) )
">: " ) ) )
(tp) ) )
(setq sbd (cond ((getint (strcat "\nVao so bat dau <"
(itoa (cond (sbd) ((setq sbd 1)) ) )
">: " ) ) )
(sbd) ) )
(setq doc (vla-get-ActiveDocument (vlax-get-Acad-Object)))
(vlax-for e (vla-get-ActiveSelectionSet doc)
(if (= (vla-get-Alignment e) 0)
(setq ins (vlax-get e 'InsertionPoint))
(setq ins (vlax-get e 'TextAlignmentPoint)) )
(setq lst (cons (list e ins )lst)))
(setq i (1- sbd)
lst (sort_lst lst tp )
lst (append (mapcar 'car lst) ) )
(foreach e lst
(vla-put-TextString e (itoa(setq i (1+ i)))) ) ))
(princ))
Mình có lisp này tải trên diễn đàn. Giờ mình muốn thêm tổng số đối tượng text được chọn sau hàm vla-put-TextString mà không biết code thế nào?
Ví dụ: số đối tượng chọn là 5 => lisp ĐSTT:1/05,2/05,3/05,4/05,5/05
Ví dụ: số đối tượng chọn là 12 => lisp ĐSTT:1/12,...,12/12
Cám ơn !
  • 0

#4 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 26 March 2012 - 09:13 AM

Mình có lisp này tải trên diễn đàn. Giờ mình muốn thêm tổng số đối tượng text được chọn sau hàm vla-put-TextString mà không biết code thế nào?
Ví dụ: số đối tượng chọn là 5 => lisp ĐSTT:1/05,2/05,3/05,4/05,5/05
Ví dụ: số đối tượng chọn là 12 => lisp ĐSTT:1/12,...,12/12
Cám ơn !

Thay
(vla-put-TextString e (itoa (setq i (1+ i)))))))
Bằng
(vla-put-TextString e (strcat (itoa (setq i (1+ i))) "/" (if (< (length lst) 10) (strcat "0" (itoa (length lst))) (itoa (length lst))))))))
  • 1

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#5 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 26 March 2012 - 09:14 AM


;; free lisp from cadviet.com
;;; this lisp was downloaded from http://www.cadviet.com/forum/index.php?showtopic=13203&st=2460
(defun c:dstt (/ doc i ins lst)
(vl-load-com)
(defun sort_lst (lst dk)
(if (= dk "Left")
(vl-sort lst '(lambda (x y)
(or (< (car (cadr x)) (car (cadr y)))
(and (= (car (cadr x)) (car (cadr y)))
(< (cadr (cadr x)) (cadr (cadr y))) )) ))
(vl-sort lst '(lambda (x y)
(or (> (car (cadr x)) (car (cadr y)))
(and (= (car (cadr x)) (car (cadr y)))
(< (cadr (cadr x)) (cadr (cadr y))) )) ))) )

(if (ssget '((0 . "TEXT,mtext")))
(progn
(initget 0 "Left Right")
(setq tp (cond ((getkword (strcat "\nBat dau tu: [Left/Right] <"
(cond (tp) ((setq tp "Right")) )
">: " ) ) )
(tp) ) )
(setq sbd (cond ((getint (strcat "\nVao so bat dau <"
(itoa (cond (sbd) ((setq sbd 1)) ) )
">: " ) ) )
(sbd) ) )
(setq doc (vla-get-ActiveDocument (vlax-get-Acad-Object)))
(vlax-for e (vla-get-ActiveSelectionSet doc)
(if (= (vla-get-Alignment e) 0)
(setq ins (vlax-get e 'InsertionPoint))
(setq ins (vlax-get e 'TextAlignmentPoint)) )
(setq lst (cons (list e ins )lst)))
(setq i (1- sbd)
lst (sort_lst lst tp )
lst (append (mapcar 'car lst) ) )
(foreach e lst
(vla-put-TextString e (itoa(setq i (1+ i)))) ) ))
(princ))
Mình có lisp này tải trên diễn đàn. Giờ mình muốn thêm tổng số đối tượng text được chọn sau hàm vla-put-TextString mà không biết code thế nào?
Ví dụ: số đối tượng chọn là 5 => lisp ĐSTT:1/05,2/05,3/05,4/05,5/05
Ví dụ: số đối tượng chọn là 12 => lisp ĐSTT:1/12,...,12/12
Cám ơn !

Bạn tham khảo :


(defun c:dstt (/ doc i ins lst)
(vl-load-com)
(defun sort_lst (lst dk)
(if (= dk "Left")
(vl-sort lst '(lambda (x y)
(or (< (car (cadr x)) (car (cadr y)))
(and (= (car (cadr x)) (car (cadr y)))
(< (cadr (cadr x)) (cadr (cadr y))) )) ))
(vl-sort lst '(lambda (x y)
(or (> (car (cadr x)) (car (cadr y)))
(and (= (car (cadr x)) (car (cadr y)))
(< (cadr (cadr x)) (cadr (cadr y))) )) ))) )

(if (ssget '((0 . "TEXT,mtext")))
(progn
(initget 0 "Left Right")
(setq tp (cond ((getkword (strcat "\nBat dau tu: [Left/Right] <"
(cond (tp) ((setq tp "Right")) )
">: " ) ) )
(tp) ) )
(setq sbd (cond ((getint (strcat "\nVao so bat dau <"
(itoa (cond (sbd) ((setq sbd 1)) ) )
">: " ) ) )
(sbd) ) )
(setq doc (vla-get-ActiveDocument (vlax-get-Acad-Object)))
(vlax-for e (vla-get-ActiveSelectionSet doc)
(if (= (vla-get-Alignment e) 0)
(setq ins (vlax-get e 'InsertionPoint))
(setq ins (vlax-get e 'TextAlignmentPoint)) )
(setq lst (cons (list e ins )lst)))
(setq i (1- sbd)
lst (sort_lst lst tp )
lst (append (mapcar 'car lst) ) )
(foreach e lst
(vla-put-TextString e (strcat (itoa(setq i (1+ i))) "/" (them0 (itoa (length lst)))) ) ) ))
(princ))
(defun them0 (str)
(if (< (atof str) 10) (strcat "0" str) str)
)

  • 1

#6 NguyenNgocSon

NguyenNgocSon

    biết dimbaseline

  • Members
  • PipPipPipPipPip
  • 368 Bài viết
Điểm đánh giá: 39 (tàm tạm)

Đã gửi 26 March 2012 - 09:45 AM

Cám ơn bác nhiều. Nhân tiện bác cho e hỏi nếu muốn đánh STT theo chiều: từ trái qua phải , rồi từ trên xuống dưới thì ntn ah ?
Thân !
  • 0

#7 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 26 March 2012 - 10:03 AM

Cám ơn bác nhiều. Nhân tiện bác cho e hỏi nếu muốn đánh STT theo chiều: từ trái qua phải , rồi từ trên xuống dưới thì ntn ah ?
Thân !

Thay 2 dòng
(< (cadr (cadr x)) (cadr (cadr y)))
bằng dấu ngược lại (tức là thay < bởi >)
  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#8 NguyenNgocSon

NguyenNgocSon

    biết dimbaseline

  • Members
  • PipPipPipPipPip
  • 368 Bài viết
Điểm đánh giá: 39 (tàm tạm)

Đã gửi 26 March 2012 - 10:10 AM

Mình thử thay như trên, thấy không đúng thứ tự trên ?
  • 0

#9 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 26 March 2012 - 10:15 AM

Mình thử thay như trên, thấy không đúng thứ tự trên ?

Bạn có thay đủ cả 2 dòng không? Xem lại cẩn thận đi.
Nếu không được thì post bản vẽ lên
  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#10 NguyenNgocSon

NguyenNgocSon

    biết dimbaseline

  • Members
  • PipPipPipPipPip
  • 368 Bài viết
Điểm đánh giá: 39 (tàm tạm)

Đã gửi 26 March 2012 - 10:24 AM

Bản vẽ đây.Mình đã chỉnh sửa rồi.
http://www.cadviet.c.../48467_dstt.dwg
  • 0

#11 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 26 March 2012 - 10:33 AM


(defun c:dstt (/ doc i ins lst)
(vl-load-com)
(defun sort_lst (lst dk)
(if (= dk "Left")
(vl-sort lst '(lambda (x y)
(or
(> (cadr (cadr x)) (cadr (cadr y)))
(and
(= (cadr (cadr x)) (cadr (cadr y)))
(< (car (cadr x)) (car (cadr y))))))) ;>
(vl-sort lst '(lambda (x y)
(or
(> (cadr (cadr x)) (cadr (cadr y)))
(and
(= (cadr (cadr x)) (cadr (cadr y)))
(< (car (cadr x)) (car (cadr y))))))))) ;>
(if (ssget '((0 . "TEXT,mtext")))
(progn
(initget 0 "Left Right")
(setq tp (cond ((getkword (strcat "\nBat dau tu: [Left/Right] <"
(cond (tp) ((setq tp "Right")))
">: " ) ) )
(tp) ) )
(setq sbd (cond ((getint (strcat "\nVao so bat dau <"
(itoa (cond (sbd) ((setq sbd 1))))
">: " )))
(sbd)))
(setq doc (vla-get-ActiveDocument (vlax-get-Acad-Object)))
(vlax-for e (vla-get-ActiveSelectionSet doc)
(if (= (vla-get-Alignment e) 0)
(setq ins (vlax-get e 'InsertionPoint))
(setq ins (vlax-get e 'TextAlignmentPoint)))
(setq lst (cons (list e ins )lst)))
(setq i (1- sbd)
lst (sort_lst lst tp )
lst (append (mapcar 'car lst)))
(foreach e lst
;(vla-put-TextString e (itoa (setq i (1+ i)))))))
(vla-put-TextString e (strcat (itoa (setq i (1+ i))) "/" (if (< (length lst) 10) (strcat "0" (itoa (length lst))) (itoa (length lst))))))))
(princ))

  • 2

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#12 NguyenNgocSon

NguyenNgocSon

    biết dimbaseline

  • Members
  • PipPipPipPipPip
  • 368 Bài viết
Điểm đánh giá: 39 (tàm tạm)

Đã gửi 26 March 2012 - 10:33 AM

Cám ơn Bác.Em đã chỉnh sửa được rồi
là như này:

(vl-sort lst '(lambda (x y)
(or (> (cadr (cadr x)) (cadr (cadr y)))
(and (= (cadr (cadr x)) (cadr (cadr y)))
(< (car (cadr x)) (car (cadr y))) )) ))

  • 0

#13 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 26 March 2012 - 10:41 AM

Cám ơn Bác.Em đã chỉnh sửa được rồi
là như này:


(vl-sort lst '(lambda (x y)
(or (> (cadr (cadr x)) (cadr (cadr y)))
(and (= (cadr (cadr x)) (cadr (cadr y)))
(< (car (cadr x)) (car (cadr y))) )) ))

Bạn phải sửa cả 2 dòng (vl-sort...), chứ chỉ sửa 1 dòng (vl-sort...) là không ổn đấy nhé!
  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#14 NguyenNgocSon

NguyenNgocSon

    biết dimbaseline

  • Members
  • PipPipPipPipPip
  • 368 Bài viết
Điểm đánh giá: 39 (tàm tạm)

Đã gửi 26 March 2012 - 10:47 AM

Ok.thank bạn nhiều. Cái dòng thứ 2 vẫn mình muốn để Right thì chỉnh lại mà chứ không muốn toàn bộ thế,vv.
  • 0

#15 NguyenNgocSon

NguyenNgocSon

    biết dimbaseline

  • Members
  • PipPipPipPipPip
  • 368 Bài viết
Điểm đánh giá: 39 (tàm tạm)

Đã gửi 26 March 2012 - 11:05 AM

Cái vụ này,nếu muốn đánh STT cho cả Text,lần Mtext có lẽ là do hàm vla-put-TextString đúng ko?
  • 0

#16 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 26 March 2012 - 02:27 PM

Cái vụ này,nếu muốn đánh STT cho cả Text,lần Mtext có lẽ là do hàm vla-put-TextString đúng ko?

Lisp này không dùng được cho Mtext. Lý do là hàm vla-get-Alignment chỉ dùng được cho Text.
Muốn dùng được cho mtext phải sửa lisp theo cách khác.
  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.