Đến nội dung


Hình ảnh
- - - - -

[Yêu cầu] Lisp chỉnh sửa nội dung text


  • Please log in to reply
22 replies to this topic

#1 tinya1225

tinya1225

    biết lệnh copy

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

Đã gửi 31 May 2011 - 02:15 PM

Chào các bác. em có 1 vấn đề thế này. trong bản vẽ có khoảng 50 text với số thứ tự (XX-01) đến (XX-50), mỗi text ứng với 1 thiết bị nhất định, khi em muốn thêm vào khoảng giữa 1 vài thiết bị khác (kèm theo text) thì số thứ tự các thiết bị sau sẽ bị đẩy lùi tùy số lượng thiết bị thêm vào. em muốn xin 1 lisp có tác dụng cộng thêm 1 giá trị n ( n=1,2,3...) vào những text được trọn (quét hoặc pick), tất nhiên là chỉ cộng thêm vào với dạng số còn dạng chữ thì giữ nguyên: (XX-01)+ 2 = (XX-03)
em cám ơn và chúc cả nhà 1 ngày may mắn.
  • 1
Thấy bài có ích thì ấn thật nhiều Thank + các bác nhé^^

#2 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 31 May 2011 - 02:20 PM

Chính xác dạng text của bạn là như thế nào ? Chỉ có XX-Số thôi ?
  • 2

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 tinya1225

tinya1225

    biết lệnh copy

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

Đã gửi 31 May 2011 - 02:27 PM

Chính xác dạng text của bạn là như thế nào ? Chỉ có XX-Số thôi ?

dạng text của em là (XX-số)
với xx là ký hiệu riêng của từng thiết bị ở dạng chữ cái như là EF, AC...
số là số hiệu của thiết bị đi kèm
có dấu ngoặc đơn hoặc ko cũng đc
thanks bác đã reply
  • 2
Thấy bài có ích thì ấn thật nhiều Thank + các bác nhé^^

#4 duy782006

duy782006

    PHẠM QUỐC DUY

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 2155 Bài viết
Điểm đánh giá: 1360 (rất tốt)

Đã gửi 31 May 2011 - 02:41 PM

dạng text của em là (XX-số)
với xx là ký hiệu riêng của từng thiết bị ở dạng chữ cái như là EF, AC...
số là số hiệu của thiết bị đi kèm
có dấu ngoặc đơn hoặc ko cũng đc
thanks bác đã reply

"hoặc" + "cũng được" = chán.
  • 0

Cứ ngỡ trần gian là cõi thật.Cho nên tất bật đến bây giờ.
Tạo hộp thoại bằng lisp My blog QUY ĐỊNH ĐẶT TÊN TOPIC TRONG CHUYÊN MỤC LISPD http://ktsduy.wordpress.com/
Để cám ơn chỉ cần nhấn rep_up.png
(Là nhấn vào nút đó phía bài viết của người ta í chứ đừng có nhè cái hình này mà nhấn miết đi nha :-D


#5 tinya1225

tinya1225

    biết lệnh copy

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

Đã gửi 31 May 2011 - 03:08 PM

"hoặc" + "cũng được" = chán.

dạ thật ra là có nhưng cái đó không quan trọng lắm nên e nói ko có cũng đc bác ah.
em cũng ko hiểu ý bác lắm phải chăng bác muốn yêu cầu cụ thể và chính xác :unsure:
  • 2
Thấy bài có ích thì ấn thật nhiều Thank + các bác nhé^^

#6 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 31 May 2011 - 03:46 PM

Mình không rành xử lý string lắm, mà chính xác là hok thích lắm. Viết như thế này, bạn thử xem có dùng được hem :
(defun c:++(/ num kq oldvalue str)
(setq num (getint "\nS\U+1ED1 c\U+1EA7n c\U+1ED9ng th\U+00EAm :"))
(foreach ent (mapcar 'vlax-ename->vla-object (vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget '((0 . "*TEXT")))))))
(setq kq (vl-string-subst
(rtos (+ num (atoi (setq oldvalue (substr
(setq str (vlax-get-property ent 'TextString))
(+ 2 (vl-string-position (ascii "-") str))
)))) 2 0)
oldvalue
str
))
(if (=(substr str (strlen str)) ")")(setq kq (strcat kq ")")))
(vlax-put-property ent 'TextString kq))
)
- Lệnh ++
- Cho phép chọn nhiều MText, Text (chú ý phải chọn nhé ^^)
- Chấp nhận kiểu text " xxx....xxxx - số (có hoặc k có ngoặc)"
  • 2

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


#7 tinya1225

tinya1225

    biết lệnh copy

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

Đã gửi 31 May 2011 - 03:59 PM

Mình không rành xử lý string lắm, mà chính xác là hok thích lắm. Viết như thế này, bạn thử xem có dùng được hem :

(defun c:++(/ num kq oldvalue str)
(setq num (getint "\nS\U+1ED1 c\U+1EA7n c\U+1ED9ng th\U+00EAm :"))
(foreach ent (mapcar 'vlax-ename->vla-object (vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget '((0 . "*TEXT")))))))
(setq kq (vl-string-subst
(rtos (+ num (atoi (setq oldvalue (substr
(setq str (vlax-get-property ent 'TextString))
(+ 2 (vl-string-position (ascii "-") str))
)))) 2 0)
oldvalue
str
))
(if (=(substr str (strlen str)) ")")(setq kq (strcat kq ")")))
(vlax-put-property ent 'TextString kq))
)

cám ơn bác đã bỏ công sức giúp em.
em đã chạy lệnh báo lỗi như sau:

Command: ++

Số cần cộng thêm :1

Select objects: 1 found

Select objects:
; error: no function definition: nil

đã thử với text, mtext, dtext
mong bác tiếp tục giúp em.
  • 2
Thấy bài có ích thì ấn thật nhiều Thank + các bác nhé^^

#8 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 31 May 2011 - 04:04 PM

Bạn thêm dòng (vl-load-com) vào đầu hoặc cuối lisp hộ mình, có khả năng chưa load VL
  • 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


#9 tinya1225

tinya1225

    biết lệnh copy

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

Đã gửi 31 May 2011 - 04:12 PM

Bạn thêm dòng (vl-load-com) vào đầu hoặc cuối lisp hộ mình, có khả năng chưa load VL

ok ngon rùi bác a. thanks bác nhiều nhiều. nhưng có 1 vấn đề nho nhỏ. text của e là (XX - 01) khi chạy với n=1 xong thì kết quả là (XX -02), Bác chỉ giúp e để nó có dấu cách giữa "-" và "02" với a.
  • 2
Thấy bài có ích thì ấn thật nhiều Thank + các bác nhé^^

#10 tinya1225

tinya1225

    biết lệnh copy

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

Đã gửi 09 June 2011 - 10:04 AM

Đây là lisp e bác ketxu đã viết cho em: http://www.cadviet.c...iles/3/2b2b.lsp
Tác dụng của lisp: http://www.cadviet.c...=1

Trong quá trình sử dụng em có 1 vài vấn đề như sau mong các bác sửa giúp:
- Text dạng (EF - 1) khi dùng lisp với giá trị tăng thêm 2 cho kết quả (EF -3), em muốn sửa để có dấu cách giữa "-" và "3": (EF - 3)
- Với text dạng (EF - 10.1) với giá trị tăng thêm 2 cho kết quả (EF - 12), em muốn kết quả có dạng (EF - 12.1)

Mong được các bác giúp đỡ. Em cám ơn và chúc các bác 1 ngày tốt lành :rolleyes:
  • 0
Thấy bài có ích thì ấn thật nhiều Thank + các bác nhé^^

#11 pdle

pdle

    biết lệnh mtext

  • Members
  • PipPipPipPip
  • 286 Bài viết
Điểm đánh giá: 124 (tàm tạm)

Đã gửi 09 June 2011 - 12:03 PM

Đây là lisp e bác ketxu đã viết cho em: http://www.cadviet.c...iles/3/2b2b.lsp
Tác dụng của lisp: http://www.cadviet.c...=1

Trong quá trình sử dụng em có 1 vài vấn đề như sau mong các bác sửa giúp:
- Text dạng (EF - 1) khi dùng lisp với giá trị tăng thêm 2 cho kết quả (EF -3), em muốn sửa để có dấu cách giữa "-" và "3": (EF - 3)
- Với text dạng (EF - 10.1) với giá trị tăng thêm 2 cho kết quả (EF - 12), em muốn kết quả có dạng (EF - 12.1)

Mong được các bác giúp đỡ. Em cám ơn và chúc các bác 1 ngày tốt lành :rolleyes:


1. Em đã sửa lisp đó, cho phép giá trị cộng thêm có thể là số thực bất kỳ
2. Làm như đúng ý của anh
3. Lisp anh ketxu viết gọn quá, hâm mộ :D
4. Nhưng cái này chỉ làm việc khi không có ngoặc đơn!

;; free lisp from cadviet.com
;;; this lisp was downloaded from http://www.cadviet.com/forum/index.php?showtopic=43745&st=0&gopid=149909&#entry149909
(defun c:++(/ num kq oldvalue str)
(setq num (getreal "\nS\U+1ED1 c\U+1EA7n c\U+1ED9ng th\U+00EAm :"))
(foreach ent (mapcar 'vlax-ename->vla-object (vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget '((0 . "*TEXT")))))))
(setq kq (vl-string-subst
(strcat " "(rtos (+ num (atof (setq oldvalue (substr
(setq str (vlax-get-property ent 'TextString))
(+ 2 (vl-string-position (ascii "-") str))
)))) 2 (- (- (strlen oldvalue) (vl-string-position (ascii ".") oldvalue)) 1)))
oldvalue
str
))
(vlax-put-property ent 'TextString kq))
)
(vl-load-com)

  • 0
Share your knowledge. It is a way to achieve immortality !

***

PS: Nếu bài viết của mình có ích, xin hãy "Bình chọn cho bài viết này" nhé :D

#12 pdle

pdle

    biết lệnh mtext

  • Members
  • PipPipPipPip
  • 286 Bài viết
Điểm đánh giá: 124 (tàm tạm)

Đã gửi 09 June 2011 - 12:44 PM

1. Lisp này thì có ngoặc hay không, vẫn chạy tốt
2. Em đã phá tan tành cái lisp của anh ketxu rồi :P

;; free lisp from cadviet.com
;;; this lisp was downloaded from http://www.cadviet.com/forum/index.php?showtopic=43745&st=0&gopid=149909&#entry149909
(defun c:++(/ num kq oldvalue str dng ddt)
(setq num (getreal "\nS\U+1ED1 c\U+1EA7n c\U+1ED9ng th\U+00EAm :"))
(foreach ent (mapcar 'vlax-ename->vla-object (vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget '((0 . "*TEXT")))))))
(setq dng (vl-string-position (ascii ")") (setq str (vlax-get-property ent 'TextString))))
(if (= dng nil) (setq dng (strlen str)))
(setq kq (vl-string-subst
(strcat " " (rtos (+ num (atof (setq oldvalue (substr str
(+ 2 (setq ddt (vl-string-position (ascii "-") str))) (- dng ddt 1)))))
2 (- (strlen oldvalue) (cond ((vl-string-position (ascii ".") oldvalue)) (T (1- (strlen oldvalue)))) 1)))
oldvalue
str
))

(vlax-put-property ent 'TextString kq)))
(vl-load-com)

  • 5
Share your knowledge. It is a way to achieve immortality !

***

PS: Nếu bài viết của mình có ích, xin hãy "Bình chọn cho bài viết này" nhé :D

#13 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 09 June 2011 - 01:53 PM

1. Lisp này thì có ngoặc hay không, vẫn chạy tốt
2. Em đã phá tan tành cái lisp của anh ketxu rồi :P

Tan cũng được, miễn là nó đúng với yêu cầu đề ra, vì 1 việc có thể đi nhiều con đường mà :)
Cảm ơn pdle ^^
@Tinya : bạn không nên mở nhiều topic vì 1 vấn đề.Lần này mình gộp lại.Lần sau nếu làm thế mình sẽ tick cảnh cáo nhé :angry:
Cũng xin nhận lỗi với bạn vì topic đó mình không theo dõi thưỡng xuyên được, nên không biết bạn có vướng mắc
  • 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


#14 tinya1225

tinya1225

    biết lệnh copy

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

Đã gửi 09 June 2011 - 02:10 PM

1. Lisp này thì có ngoặc hay không, vẫn chạy tốt
2. Em đã phá tan tành cái lisp của anh ketxu rồi :P

;; free lisp from cadviet.com
;;; this lisp was downloaded from http://www.cadviet.com/forum/index.php?showtopic=43745&st=0&gopid=149909&#entry149909
(defun c:++(/ num kq oldvalue str dng ddt)
(setq num (getreal "\nS\U+1ED1 c\U+1EA7n c\U+1ED9ng th\U+00EAm :"))
(foreach ent (mapcar 'vlax-ename->vla-object (vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget '((0 . "*TEXT")))))))
(setq dng (vl-string-position (ascii ")") (setq str (vlax-get-property ent 'TextString))))
(if (= dng nil) (setq dng (strlen str)))
(setq kq (vl-string-subst
(strcat " " (rtos (+ num (atof (setq oldvalue (substr str
(+ 2 (setq ddt (vl-string-position (ascii "-") str))) (- dng ddt 1)))))
2 (- (strlen oldvalue) (cond ((vl-string-position (ascii ".") oldvalue)) (T (1- (strlen oldvalue)))) 1)))
oldvalue
str
))

(vlax-put-property ent 'TextString kq)))
(vl-load-com)

Cám ơn bạn nhiều nhé. Thanks + bạn rùi đó ^^.
@Ketxu bác ơi vì hôm trc bác nói ko thích string lắm, em đợi mấy hôm ko thấy bác reply nên mới viết thêm, mà bài cũ chẳng biết viết thêm vào cái j nên mới lập thêm 2pic. lần sau e sẽ chú ý hơn :rolleyes:
Mà bác bảo nhận lỗi với e sao ko cho em cái thanks + coi như tạ lỗi nhỉ :lol:
Chúc cả nhà 1 ngày vui vẻ :))
  • 0
Thấy bài có ích thì ấn thật nhiều Thank + các bác nhé^^

#15 bienda

bienda

    biết vẽ polygon

  • Members
  • PipPip
  • 70 Bài viết
Điểm đánh giá: -4 (bình thường)

Đã gửi 05 October 2011 - 04:20 PM

Tan cũng được, miễn là nó đúng với yêu cầu đề ra, vì 1 việc có thể đi nhiều con đường mà Hình đã gửi
Cảm ơn pdle ^^
@Tinya : bạn không nên mở nhiều topic vì 1 vấn đề.Lần này mình gộp lại.Lần sau nếu làm thế mình sẽ tick cảnh cáo nhé :angry:
Cũng xin nhận lỗi với bạn vì topic đó mình không theo dõi thưỡng xuyên được, nên không biết bạn có vướng mắc



Giả sự text của tôi có dạng xxxxyyyy (trong đó X là chữ, còn y là số, ví dụ: ABC123) thì lisp này phải sửa thế nào?
Mong các bác chỉ giúp
  • 0

#16 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 05 October 2011 - 04:51 PM



Giả sự text của tôi có dạng xxxxyyyy (trong đó X là chữ, còn y là số, ví dụ: ABC123) thì lisp này phải sửa thế nào?
Mong các bác chỉ giúp

Đây là Text có tiền tố. Bạn muốn sửa từ lsp của ai nào, ở # ?
P/S: srr, có Ket thì để Ket sửa, tội gì! Hihihi.
  • 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.


#17 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 05 October 2011 - 04:53 PM



Giả sự text của tôi có dạng xxxxyyyy (trong đó X là chữ, còn y là số, ví dụ: ABC123) thì lisp này phải sửa thế nào?
Mong các bác chỉ giúp

Bạn miêu tả lại Yêu cầu của mình và chính xác định dạng là như thế nào ?
  • 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


#18 bienda

bienda

    biết vẽ polygon

  • Members
  • PipPip
  • 70 Bài viết
Điểm đánh giá: -4 (bình thường)

Đã gửi 05 October 2011 - 05:08 PM

Bạn miêu tả lại Yêu cầu của mình và chính xác định dạng là như thế nào ?


vẫn chỉ như bài viết này thôi
Text của bác trên có dạng ABC-123
Nhưng text của em chỉ là ABC123
thì sửa lisp của bác như thế nào
Cảm ơn bác đã trả lời em
  • 0

#19 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 05 October 2011 - 10:58 PM


vẫn chỉ như bài viết này thôi
Text của bác trên có dạng ABC-123
Nhưng text của em chỉ là ABC123
thì sửa lisp của bác như thế nào
Cảm ơn bác đã trả lời em




(defun c:++(/)
(setq ss (ssget (list (cons 0 "TEXT,MTEXT"))) ss (vla-get-ActiveSelectionSet (vla-get-ActiveDocument (vlax-get-acad-object)))
int (getint "\nSo can cong them :"))
(vlax-for ent ss
(vla-put-textstring
ent
(strcat
(setq str
(vl-list->string
(vl-remove-if-not '(lambda(x) (or (< x 48) (> x 57)))
(vl-string->list (setq fStr (vla-get-textstring ent))))
)
)
(vl-princ-to-string (+ int(atoi (vl-string-left-trim str fStr) )))
)
)
)
)

  • 0

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


#20 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 05 October 2011 - 11:02 PM


vẫn chỉ như bài viết này thôi
Text của bác trên có dạng ABC-123
Nhưng text của em chỉ là ABC123
thì sửa lisp của bác như thế nào
Cảm ơn bác đã trả lời em

@Ketxu: không thấy Ket giúp nên nghĩ chắc Ket bận, đành liều giúp vậy, có gì thì srr nhé!
Bạn dùng cái này thì Text có các kiểu tiền tố và hậu tố hay số nguyên và số thực đều OK
P/S: loay hoay viết, đến khi xong, thì Ket đã xong rồi, srr Ket.

(defun C:HA( / num txtm) ;Doan Van Ha CADViet.com
(setq num (getreal "\nNhap so can them/bot: "))
(princ "\nChon cac Text can thay doi...")
(foreach ent (acet-ss-to-list (ssget '((0 . "*TEXT"))))
(setq txtm (acet-str-replace (cadr (chia3 (cdr (assoc 1 (entget ent)))))
(rtos (+ num (atof (cadr (chia3 (cdr (assoc 1 (entget ent))))))) 2 (get-sle (cadr (chia3 (cdr (assoc 1 (entget ent)))))))
(cdr (assoc 1 (entget ent)))))
(entmod (subst (cons 1 txtm) (cons 1 (cdr (assoc 1 (entget ent)))) (entget ent)))))
(defun get-sle (str)
(if (not (acet-str-find "." str)) 0 (- (strlen str) (acet-str-find "." str))))
(defun CHIA3 (str / trai phai lstt lstn)
(setq lstt (vl-string->list str) lstn (reverse lstt))
(while lstt
(cond ((or (< (car lstt) 48) (> (car lstt) 57)) (setq trai (cons (car lstt) trai) lstt (cdr lstt)))
(T (setq lstt nil))))
(while lstn
(cond ((or (< (car lstn) 48) (> (car lstn) 57)) (setq phai (cons (car lstn) phai) lstn (cdr lstn)))
(T (setq lstn nil))))
(setq ds (list (vl-list->string (reverse trai))
(if (= (strlen str) (strlen (vl-list->string (reverse trai)))) "" (vl-string-right-trim (vl-list->string phai) (vl-string-left-trim (vl-list->string trai) str)))
(if (= (strlen str) (strlen (vl-list->string (reverse trai)))) "" (vl-list->string phai)))))

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