Đến nội dung


Hình ảnh
- - - - -

SSGET và STRCASE


  • Please log in to reply
9 replies to this topic

#1 Polyline

Polyline

    biết lệnh mirror

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

Đã gửi 04 July 2014 - 05:13 PM

Mình muốn sử dụng hàm SSGET để chọn text đã có sẵn trên bản vẽ, bỏ qua thuộc tính STRCASE của nó, nghĩa là khi người dùng nhập vào "abc" thì tất cả các text sau đây đều bị chọn:
ABC
ABc
AbC
aBC
Abc
abC
aBc
abc

Liệu có thể thực hiện trực tiếp với SSGET được không, không cần sử dụng vòng lặp?


  • 0

#2 Tot77

Tot77

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 990 Bài viết
Điểm đánh giá: 498 (tốt)

Đã gửi 04 July 2014 - 06:52 PM

Bạn thử cái này.

(ssget '((0 . "TEXT") (1 . "@@@") (1 . "*[Aa]*[Bb]*[Cc]")))

Cái số 1 đầu là text chỉ có 3 chữ thôi, cái 1 số 2 là chỉ có hoặc A hoặc a (1 trong 2) và theo thứ tự abc, khác là không được.

Hoặc có thể viết gọn hơn:

(ssget '((0 . "TEXT") (1 . "[Aa][Bb][Cc]")))


  • 1

#3 Polyline

Polyline

    biết lệnh mirror

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

Đã gửi 04 July 2014 - 07:50 PM

Cám ơn bạn Tot77 đã gợi ý. Mình viết lại cho trường hợp tổng quát thế này:

 

(setq str1 "abc"
      str2 ""
      i 0)
(while (<= (setq i (1+ i)) (strlen str1))
  (setq str2 (strcat str2 "[" (strcase (substr str1 i 1))(strcase (substr str1 i 1) T) "]")))
(ssget (list (cons 1 str2)))

 

(mình không cho thẻ code vào được, nhờ MOD nào giúp nhé)


  • 0

#4 Tot77

Tot77

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 990 Bài viết
Điểm đánh giá: 498 (tốt)

Đã gửi 04 July 2014 - 08:16 PM

Bạn không viết (0 . "TEXT") thì có thể bắt cả dim cũng được. :)


  • 1

#5 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 04 July 2014 - 09:51 PM

Câu hỏi của Polyme không được rõ ràng cho lắm, vì:

1). "abc" chỉ là ví dụ, nhưng cuối cùng lại coi như nó là cố định?

2). Không muốn dùng vòng lặp nhưng lại xài while?


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


#6 Polyline

Polyline

    biết lệnh mirror

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

Đã gửi 05 July 2014 - 08:09 AM

Câu hỏi của Polyme không được rõ ràng cho lắm, vì:

1). "abc" chỉ là ví dụ, nhưng cuối cùng lại coi như nó là cố định?

2). Không muốn dùng vòng lặp nhưng lại xài while?

 

1. Mình đưa (setq str1 "abc") chỉ là ví dụ cho dễ hình dung thôi. Khi viết thì sẽ gọi hàm GETSTRING.

2. Ý mình nói không dùng vòng lặp, nghĩa là không chọn text trước rồi sau đó duyệt qua nội dung để so sánh với chuỗi nhập vào. Vì việc làm này sẽ tốn nhiều thời gian khi bản vẽ có số lượng text lớn.

#. Có một chút băn khoăn về STRCASE khi chỉ các ký tự A-Z mới khác nhau, còn lại (như con số và ký tự đặc biệt) thì không.


  • 0

#7 Tot77

Tot77

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 990 Bài viết
Điểm đánh giá: 498 (tốt)

Đã gửi 05 July 2014 - 11:53 AM

. Có một chút băn khoăn về STRCASE khi chỉ các ký tự A-Z mới khác nhau, còn lại (như con số và ký tự đặc biệt) thì không.

Có gì mà phải băn khoăn? bạn dùng hàm ascii, nếu trong khoảng 65-122 thì bỏ trong ngoặc, ngoài khoảng đó thì để nguyên.


  • 1

#8 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 05 July 2014 - 04:00 PM

#. Có một chút băn khoăn về STRCASE khi chỉ các ký tự A-Z mới khác nhau, còn lại (như con số và ký tự đặc biệt) thì không.

Cứ mặc kệ nó, là từ a-z hay ký tự đặc biệt thì vẫn cho vào ngoặc vẫn vô tư.


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


#9 Polyline

Polyline

    biết lệnh mirror

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

Đã gửi 06 July 2014 - 10:07 AM

Cứ mặc kệ nó, là từ a-z hay ký tự đặc biệt thì vẫn cho vào ngoặc vẫn vô tư.

Với ssget thì có khác nhau về bản chất đấy bác ạ! Ví dụ chuỗi "*[Bb][Cc]" cho phép ký tự đại diện, còn chuỗi "[**][Bb][Cc]" thì không.


  • 0

#10 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 06 July 2014 - 10:24 AM

Tại vì từ đầu bạn nói chọn chuỗi tường minh chứ không phải chọn chuỗi chứa ký tự đại diện * nên tôi mới bảo là được.

Chẳng hạn [??][Aa][Bb] thì chọn được "?ab". Còn chứa ký tự đại diện thì bạn nói đúng rồ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.