Đến nội dung


Hình ảnh
5 stars - based on 24598 reviews
* * * - - 3 Bình chọn

Hướng dẫn lập trình Lisp


  • Please log in to reply
493 replies to this topic

#41 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 28 February 2009 - 04:37 PM

Chào bạn phamthanhbinh
Ý của mình như số 2 và 3 bạn đã nêu đó, số 1 mình đã hiểu cách lọc rồi còn cách lọc rắc rối hơn thì mình chưa làm được nên mới hỏi mọi người. Để mình thử làm theo hướng dẫn của bạn ha, nếu khó quá mình sẽ phải làm từ từ như ý số 4 bạn đã nêu.
Cám ơn thanhbinh nhiều nha.
Chúc bạn cuối tuần vui vẻ.
:undecided:

Bạn Tuan_thietkedien ơi,
Mình sai rồi. Trong hàm While mình đã ví dụ ở trên, bạn phải đổi chuỗi "line" thành chuỗi "LINE" mới đúng vì hàm (= ..... ) so sánh các chuỗi phải giống hệt nhau cả về case của nó. Hàm (cdr (assoc 0 (.......))) sẽ trả về chuỗi toàn ký tự in hoa thôi bạn ạ.
Xin lỗi bạn vì mình cũng mới phát hiện ra lỗi này.
Chúc bạn vui.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#42 tiger99

tiger99

    biết vẽ line

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

Đã gửi 11 March 2009 - 04:47 PM

Tự tay mình lập một chương trình Lisp có gì khác so với nhờ ai đó làm? Chưa cần xét kết quả, điểm khác nhau rất cơ bản là bạn sẽ có được cái cảm giác rất là khoái chí (không thể diễn tả) khi chạy thử chương trình.
Ssg lập topic này không ngoài mục đích tạo điều kiện cho các bạn tự mình tìm hiểu và khám phá cái cảm giác "khoái chí không thể diễn tả" nói trên.
Với tinh thần "Share is Receive", ssg cũng mong các bạn đã thành thạo Lisp quan tâm giúp đỡ các bạn mới để cộng đồng Lisp của CadViet ngày càng đông vui và tạo được nhiều chương trình hữu ích.
Để bắt đầu, ssg post lại một bài viết cũ, nhưng có lẽ vẫn còn mới đối với một số bạn. Hy vọng sẽ giúp được chút gì đó cho các bạn mới tiếp cận với Lisp:

http://www.cadviet.c...les/Relax_1.zip

Download, giải nén rồi đọc file *.doc

trong bài của bác có cái hàn polar em ko hiểu bác có thể giải thích nó được ko??
  • 0

#43 tucdrom

tucdrom

    — T — U — N — A —

  • Members
  • PipPipPipPipPipPip
  • 497 Bài viết
Điểm đánh giá: 642 (tốt)

Đã gửi 11 March 2009 - 06:30 PM

trong bài của bác có cái hàn polar em ko hiểu bác có thể giải thích nó được ko??


*Có 2 phương thức nhập toạ độ điểm trong Cad:

-Nhập toạ độ theo hệ toạ độ Đêcac,nhập theo toạ độ X,Y(trong mặt phẳng),hoặc X,Y,Z (trong không gian)

-Nhập theo toạ độ cực:toạ độ của 1 điểm xác định theo khoảng cách từ điểm đó đến gốc toạ độ (0,0) và góc quay từ điểm đó so với trục X.Và hàm Polar là hàm xác định toạ độ của điểm theo toạ độ cực

Ví dụ :M ( a b ) thì a:khoảng cách từ điểm M đến gốc toạ độ (0,0)
b:góc xoay của điểm M so với trục X
  • 0

Email : anhtu2101@gmail.com



 


#44 ssg

ssg

    biết lệnh adcenter

  • Vip
  • PipPipPipPipPipPipPip
  • 1228 Bài viết
Điểm đánh giá: 1087 (rất tốt)

Đã gửi 12 March 2009 - 05:31 PM

trong bài của bác có cái hàn polar em ko hiểu bác có thể giải thích nó được ko??

(setq p2 (polar p1 a r)) -> trả về điểm p2, có:
- Góc định hướng của p1p2 so với phương ngang là a (radian)
- Khoảng cách p1p2 = r
  • 0

#45 tuan_thietkedien

tuan_thietkedien

    biết lệnh mirror

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

Đã gửi 21 March 2009 - 10:33 AM

Các bác pro xin hướng dẫn em làm cái lísp sau
Em muốn số hóa nội dung trong text, cụ thể như A thành 1, B thành 2, C thành 3, D thành 4, E thành 5.
Đầu tiên mình chọn text
Lấy nội dung text
N : lấy số lượng chữ trong text

Vậy làm thế nào để mình xét từng chữ trong N, và cứ gặp ABCDE sẽ chuyển thành 12345.

Ví dụ : Text nội dung là CAD-2008 sau khi chạy lisp chuyển thành 314-2008.

Xin cám ơn nhiều.
  • 0

#46 tucdrom

tucdrom

    — T — U — N — A —

  • Members
  • PipPipPipPipPipPip
  • 497 Bài viết
Điểm đánh giá: 642 (tốt)

Đã gửi 21 March 2009 - 10:51 AM

Các bác pro xin hướng dẫn em làm cái lísp sau
Em muốn số hóa nội dung trong text, cụ thể như A thành 1, B thành 2, C thành 3, D thành 4, E thành 5.
Đầu tiên mình chọn text
Lấy nội dung text
N : lấy số lượng chữ trong text

Vậy làm thế nào để mình xét từng chữ trong N, và cứ gặp ABCDE sẽ chuyển thành 12345.

Ví dụ : Text nội dung là CAD-2008 sau khi chạy lisp chuyển thành 314-2008.

Xin cám ơn nhiều.

Bác thử sài lệnh Find(Find and Replace) của Cad xem sao?
:undecided:
  • 2

Email : anhtu2101@gmail.com



 


#47 ssg

ssg

    biết lệnh adcenter

  • Vip
  • PipPipPipPipPipPipPip
  • 1228 Bài viết
Điểm đánh giá: 1087 (rất tốt)

Đã gửi 21 March 2009 - 12:15 PM

Các bác pro xin hướng dẫn em làm cái lísp sau
Em muốn số hóa nội dung trong text, cụ thể như A thành 1, B thành 2, C thành 3, D thành 4, E thành 5.
Đầu tiên mình chọn text
Lấy nội dung text
N : lấy số lượng chữ trong text

Vậy làm thế nào để mình xét từng chữ trong N, và cứ gặp ABCDE sẽ chuyển thành 12345.

Ví dụ : Text nội dung là CAD-2008 sau khi chạy lisp chuyển thành 314-2008.

Xin cám ơn nhiều.

Bạn tìm hiểu function vl-string-translate (lật Help ra xem) sẽ có câu trả lời.
Muốn cho code hay hơn, tìm hiểu thêm functions asciichr

@tucdrom
Bạn Tuấn muốn hỏi về lập trình chứ không phải dùng lệnh CAD, hai việc ấy khác nhau nhiều lắm.
Lệnh CAD: Find và Replace xong rồi thôi
Lisp: Trước và sau khi Find and Replace, chương trình có thể thực hiện tự động nhiều việc khác nữa, tuỳ ý đồ người lập trình...
  • 0

#48 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 21 March 2009 - 01:19 PM

Muốn cho code hay hơn, tìm hiểu thêm functions asciichr

Chào bạn TuanThietkedien
Mình gợi ý thế này, bạn xây dựng chương trình thử xem nhé :
1. Đọc chuỗi (dùng getstring và strcase)
2. Dùng strlen tính số chữ trong chuỗi. (biến n)
3. Khởi tạo biến đếm i=1
3. Dùng vòng lặp while (:undecided:
  • 0

#49 tuan_thietkedien

tuan_thietkedien

    biết lệnh mirror

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

Đã gửi 21 March 2009 - 03:20 PM

Bạn tìm hiểu function vl-string-translate (lật Help ra xem) sẽ có câu trả lời.
Muốn cho code hay hơn, tìm hiểu thêm functions asciichr

@tucdrom
Bạn Tuấn muốn hỏi về lập trình chứ không phải dùng lệnh CAD, hai việc ấy khác nhau nhiều lắm.
Lệnh CAD: Find và Replace xong rồi thôi
Lisp: Trước và sau khi Find and Replace, chương trình có thể thực hiện tự động nhiều việc khác nữa, tuỳ ý đồ người lập trình...


Chào anh SSG
Trước tiên em đã dùng thử vl-string-translate, và viết được 2 cái lisp sau
1. Lisp chuyển ABC thành 123
(defun c:hk ( / e d nd td )
(setq
e (car(entsel))
d (entget e)
nd (cdr(assoc 1 d))
td (vl-string-translate "ABC" "123" nd)
d (subst (cons 1 td) (assoc 1 d) d)
)
(entmod d)
(princ)
)

2. Lisp chuyển ABC tiếng Anh thành ABC tiếng Nhật.
(defun c:hk ( / e d nd td )
(setq
e (car(entsel))
d (entget e)
nd (cdr(assoc 1 d))
td (vl-string-translate "ABC" "ABC" nd)
d (subst (cons 1 td) (assoc 1 d) d)
)
(entmod d)
(princ)
)

Lúc đầu em nghĩ nếu chuyển được ABC thành 123 thì cũng có thể chuyển được ABC tiếng Anh thành ABC tiếng Nhật. Nhưng cái lisp thứ 2 không dùng được. Xin bác cho em thêm ý kiến.
Tham khảo 2 kiểu chữ tiếng Anh và tiếng Nhật
http://www.cadviet.c...Drawing2_12.dwg ( 3 chữ CAD nhỏ là kiểu tiếng Nhật )

@Tue_NV : mình cám ơn bạn đã góp ý nhé.
  • 0

#50 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 21 March 2009 - 05:29 PM

Chào anh SSG
Trước tiên em đã dùng thử vl-string-translate, và viết được 2 cái lisp sau
1. Lisp chuyển ABC thành 123

(defun c:hk ( / e d nd td )
(setq
e (car(entsel))
d (entget e)
nd (cdr(assoc 1 d))
td (vl-string-translate "ABC" "123" nd)
d (subst (cons 1 td) (assoc 1 d) d)
)
(entmod d)
(princ)
)

2. Lisp chuyển ABC tiếng Anh thành ABC tiếng Nhật.
(defun c:hk ( / e d nd td )
(setq
e (car(entsel))
d (entget e)
nd (cdr(assoc 1 d))
td (vl-string-translate "ABC" "ABC" nd)
d (subst (cons 1 td) (assoc 1 d) d)
)
(entmod d)
(princ)
)

Lúc đầu em nghĩ nếu chuyển được ABC thành 123 thì cũng có thể chuyển được ABC tiếng Anh thành ABC tiếng Nhật. Nhưng cái lisp thứ 2 không dùng được. Xin bác cho em thêm ý kiến.
Tham khảo 2 kiểu chữ tiếng Anh và tiếng Nhật
http://www.cadviet.c...Drawing2_12.dwg ( 3 chữ CAD nhỏ là kiểu tiếng Nhật )

@Tue_NV : mình cám ơn bạn đã góp ý nhé.

Bạn tuan_thietkedien ơi,
Bạn suy luận vậy là hơi máy móc rồi. Bạn nhớ rằng hàm vl-string-translate là hàm dịch theo chuỗi ký tự một cách máy móc thôi. Nghĩa là cái gì bạn đã liệt kê trong chuỗi mẫu sẽ được dịch thành chuỗi kết quả tương ứng trong chuỗi đích và chỉ có vậy. Các ký tự khác không được liệt kê ra là nó mù tịt chả hiểu đâu và sẽ giữ nguyên như bản gốc, chả dịch diếc gì sốt.
Mình chả biết cái font tiếng Nhật nó tròn méo ra răng, nhưng chắc hẳn là nó cũng khá củ chuối vì nó thuộc loại chữ tượng hình mà. Có khi một chữ cái của nó lại phải gõ tới dăm ba ký tự ấy chứ, thế thì chắc là cái hàm vl-string-translate nó ngoẻo là đúng thôi bạn ạ. Ấy là cái cách nghĩ hơi cùn của mình có gì bạn đừng giận nha.
  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#51 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 22 March 2009 - 02:30 PM

Có khi một chữ cái của nó lại phải gõ tới dăm ba ký tự ấy chứ, thế thì chắc là cái hàm vl-string-translate nó ngoẻo là đúng thôi bạn ạ.

Chào bạn Tuanthietkedien.
Chữ cái của nó nhiều hơn dăm ba kí tự nhiều bác Bình à
Đó chính là nguyên nhân dẫn đến Lisp của bạn không chạy được.

Bạn gửi cái file của bạn lên đây có 2 chữ CAD-2008 gồm 2 dòng.
Bạn nói rằng :

Lúc đầu em nghĩ nếu chuyển được ABC thành 123 thì cũng có thể chuyển được ABC tiếng Anh thành ABC tiếng Nhật.

Phải chăng dòng đầu CAD-2008 là chữ tiếng Anh. Dòng thứ 2 : CAD-2008 là chữ Tiếng Nhật.
Và ý của bạn muốn biến chữ CAD tiếng Anh thành chữ CAD tiếng Nhật.
Và đoạn lệnh (vl-string-translate "ABC" "ABC" nd) này phải chăng "ABC" là chữ Tiếng Anh; "ABC" chính là chữ "ABC" tiếng Nhật.
Mong bạn hãy giải thích thật rõ ràng thì mọi người mới có thể giúp bạn được.
Chào bạn.
  • 0

#52 tuan_thietkedien

tuan_thietkedien

    biết lệnh mirror

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

Đã gửi 23 March 2009 - 08:37 AM

Chào bạn Tuanthietkedien.
Chữ cái của nó nhiều hơn dăm ba kí tự nhiều bác Bình à
Đó chính là nguyên nhân dẫn đến Lisp của bạn không chạy được.

Bạn gửi cái file của bạn lên đây có 2 chữ CAD-2008 gồm 2 dòng.
Bạn nói rằng :

Phải chăng dòng đầu CAD-2008 là chữ tiếng Anh. Dòng thứ 2 : CAD-2008 là chữ Tiếng Nhật.
Và ý của bạn muốn biến chữ CAD tiếng Anh thành chữ CAD tiếng Nhật.
Và đoạn lệnh (vl-string-translate "ABC" "ABC" nd) này phải chăng "ABC" là chữ Tiếng Anh; "ABC" chính là chữ "ABC" tiếng Nhật.
Mong bạn hãy giải thích thật rõ ràng thì mọi người mới có thể giúp bạn được.
Chào bạn.


Chào bạn Tue_NV
Đúng là dòng đầu CAD-2008 là chữ tiếng Anh. Dòng thứ 2 : CAD-2008 là chữ Tiếng Nhật. "ABC" là chữ Tiếng Anh; "ABC" chính là chữ "ABC" tiếng Nhật. Bạn thấy chữ tiếng Nhật trông nó mập hơn phải không, nhưng khi vào Autocad trông nó lại nhỏ gọn hơn chữ tiếng Anh.
Mình up lại file khác rõ ràng hơn. À, bạn copy bổ sung font này vào thư mục Font của CAD luôn nha.
Kết quả sau khi mình dùng Lisp 2 để chuyển "ABC" chữ Tiếng Anh thành "ABC" chữ tiếng Nhật thì nó ra như vậy: bD-2008 .
Mong mọi người chỉ giáo cách khắc phục.

http://www.cadviet.c...Drawing2_13.dwg
http://www.cadviet.c...es/extfont2.shx

@phamthanhbinh:
Mình không giận bạn đâu, mình đều là anh em trên diễn đàn hết mà, mọi người góp ý chứng tỏ là có sự quan tâm, sao mình lại giận được, có như vậy thì mình mới ngày càng tiến bộ được chứ.
Cám ơn bạn luôn quan tâm, giúp đỡ nha.
Chúc bạn và mọi người 1 tuần mới làm việc vui vẻ, thành công.
  • 0

#53 gia_bach

gia_bach

    biết lệnh adcenter

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

Đã gửi 23 March 2009 - 10:04 AM

[quote name='tuan_thietkedien' post='52985' date='Mar 21 2009, 10:33']..............................
Em muốn số hóa nội dung trong text, cụ thể như A thành 1, B thành 2, C thành 3, D thành 4, E thành 5.
.........................
Ví dụ : Text nội dung là CAD-2008 sau khi chạy lisp chuyển thành 314-2008.
.............[/quote]

[quote name='tuan_thietkedien' post='53000' date='Mar 21 2009, 15:20']Chào anh SSG
Trước tiên em đã dùng thử vl-string-translate, và viết được 2 cái lisp sau
1. Lisp chuyển ABC thành 123
.......................

2. Lisp chuyển ABC tiếng Anh thành ABC tiếng Nhật.
(defun c:hk ( / e d nd td )
;;; (setq chuoi_tim (getstring t "Enter string to search for: ")
;;; chuoi_thaythe (getstring t "Enter string to replace with: "))
(setq chuoi_tim "A"
chuoi_thaythe "A")
(setq e (car(entsel))
d (entget e)
nd (cdr(assoc 1 d))
td (vl-string-subst chuoi_thaythe chuoi_tim nd)
d (subst (cons 1 td) (assoc 1 d) d)
)
(entmod d)
(princ)
)


  • 1

#54 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 23 March 2009 - 12:49 PM

Chào bạn Tue_NV
Đúng là dòng đầu CAD-2008 là chữ tiếng Anh. Dòng thứ 2 : CAD-2008 là chữ Tiếng Nhật. "ABC" là chữ Tiếng Anh; "ABC" chính là chữ "ABC" tiếng Nhật. Bạn thấy chữ tiếng Nhật trông nó mập hơn phải không, nhưng khi vào Autocad trông nó lại nhỏ gọn hơn chữ tiếng Anh.
Mình up lại file khác rõ ràng hơn. À, bạn copy bổ sung font này vào thư mục Font của CAD luôn nha.
Kết quả sau khi mình dùng Lisp 2 để chuyển "ABC" chữ Tiếng Anh thành "ABC" chữ tiếng Nhật thì nó ra như vậy: bD-2008 .
Mong mọi người chỉ giáo cách khắc phục.

Chào bạn Tuanthietkedien
Mở file bạn ra -> bấm lệnh ed (ddedit) thì chữ CAD-2008 trong Tiếng Nhật là chữ này :
\M+18262\M+18260\M+18263\M+1815B\M+18251\M+1824F\M+1824F\M+18257
Tức là chữ C trong tiếng Nhựt tương đương với chữ \M+18262 (trong tiếng Anh)
Tức là chữ A trong tiếng Nhựt tương đương với chữ \M+18260 (trong tiếng Anh)
Tức là chữ D trong tiếng Nhựt tương đương với chữ \M+18263 (trong tiếng Anh)
Ta có thể suy ra :
Chữ B trong tiếng Nhựt tương đương với chữ \M+18261 (trong tiếng Anh)
Chữ E trong tiếng Nhựt tương đương với chữ \M+18264 (trong tiếng Anh)
Tương tự, suy ra dấu -, chữ số 2; 0; 8 tương đương với chữ gì trong tiếng Anh

Nếu điều suy luận của mình là đúng thì bạn có thể dùng hàm vl-string-subst như bác gia bách đã chỉ
Hoặc có thể sử dụng như thế này : (if (= te1 "A") (setq te1 "\\M+18260"))
Tức là nếu biến te1 ="A" trong chữ tiếng Anh thì gán cho biến te1 bằng chữ "\M+18260" (tức là chữ "A" trong tiếng Nhựt)

Bạn hãy trả lời cho mình biết, những điều mình nói trên đúng hay không vì mình cũng đang có ý tưởng để trợ giúp cho bạn.
Chào bạn
  • 1

#55 tuan_thietkedien

tuan_thietkedien

    biết lệnh mirror

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

Đã gửi 23 March 2009 - 01:37 PM

Chào bạn Tuanthietkedien
Mở file bạn ra -> bấm lệnh ed (ddedit) thì chữ CAD-2008 trong Tiếng Nhật là chữ này :
\M+18262\M+18260\M+18263\M+1815B\M+18251\M+1824F\M+1824F\M+18257
Tức là chữ C trong tiếng Nhựt tương đương với chữ \M+18262 (trong tiếng Anh)
Tức là chữ A trong tiếng Nhựt tương đương với chữ \M+18260 (trong tiếng Anh)
Tức là chữ D trong tiếng Nhựt tương đương với chữ \M+18263 (trong tiếng Anh)
Ta có thể suy ra :
Chữ B trong tiếng Nhựt tương đương với chữ \M+18261 (trong tiếng Anh)
Chữ E trong tiếng Nhựt tương đương với chữ \M+18264 (trong tiếng Anh)
Tương tự, suy ra dấu -, chữ số 2; 0; 8 tương đương với chữ gì trong tiếng Anh

Nếu điều suy luận của mình là đúng thì bạn có thể dùng hàm vl-string-subst như bác gia bách đã chỉ
Hoặc có thể sử dụng như thế này : (if (= te1 "A") (setq te1 "\\M+18260"))
Tức là nếu biến te1 ="A" trong chữ tiếng Anh thì gán cho biến te1 bằng chữ "\M+18260" (tức là chữ "A" trong tiếng Nhựt)

Bạn hãy trả lời cho mình biết, những điều mình nói trên đúng hay không vì mình cũng đang có ý tưởng để trợ giúp cho bạn.
Chào bạn


Chào bạn Tue_NV
Không hiểu sao khi mình dùng lệnh ed (ddedit) thì chữ CAD-2008 kiểu gõ Tiếng Nhật vẫn ra chữ CAD-2008 như bình thường. Dấu -, chữ số 2; 0; 8 vẫn hiện ra bình thường. Bạn thử xem lại máy đã cài font tiếng Nhật chưa ( trong Control Panel \ Regional and Language options ), bạn dùng đĩa cài WinXp bỏ vào ổ đĩa, sau đó vào đường dẫn mình đã chỉ rồi check vào cái ô mình khoanh tròn đỏ, sau đó nhấp Apply là cài được. Bạn cũng xem thử Text Style trong CAD có giống mình hay không nhe. Có lẽ vì thế mà máy của bạn nó thể hiện như vậy.

http://www.cadviet.c...les/Book2_2.xls

Sau khi bạn cài xong rồi xem lại thử xem có còn tình trạng như vậy hay không nhé.

@Bác gia_bach:
Em giải thích lý do làm cái lisp thay thế chữ này để bác hiểu thêm. Tất cả những bản vẽ công ty làm sẽ gửi qua bên Nhật, do đó họ yêu cầu dùng kiểu gõ tiếng Nhật. Vậy để đảm bảo tất cả text trong bản vẽ đều là kiểu gõ tiếng Nhật nên em muốn làm 1 lisp tự động tìm và thay thế tất cả những ký tự tiếng Anh thành những ký tự tiếng Nhật.
Khi tạo bất kỳ 1 text và nhập nội dung, bởi vì phải chuyển đổi giữa 2 kiểu gõ nên nhiều khi sẽ có sơ suất. Ví dụ như text có nội dung AUTOCAD là không được vì lẫn lộn có kiểu gõ tiếng Anh ( chữ AU và CAD là kiểu gõ tiếng Anh). Sau khi dùng lisp sẽ chuyển thành như sau AUTOCAD ( toàn bộ ký tự đã chuyển sang kiểu gõ tiếng Nhật ).
Do đó nếu text có nội dung "A là B" ---> kết quả nhận được "1 là 2" thì đúng là kết quả không được mong đợi nhưng mục đích chính của em là cái lisp thứ 2, cái lisp 1 em chỉ làm thử nghiệm thôi.
Cái lisp của bác sửa lại cho em chạy rất OK nhưng ý của em là muốn lisp kiểm tra từng ký tự trong nội dung của tập hợp các text được chọn rồi sẽ thay thế luôn. Và nội dung text thì rất là nhiều chứ không chỉ lúc nào cũng là CAD-2008, cái này em chỉ nêu ra làm ví dụ thôi.

Nếu có gì chưa hiểu rõ thì bác gia_bach và bạn Tue_NV hỏi thêm nha.
Xin cám ơn đã nhiệt tình giúp đỡ.
  • 0

#56 gia_bach

gia_bach

    biết lệnh adcenter

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

Đã gửi 23 March 2009 - 03:04 PM

......................
Sau khi dùng lisp sẽ chuyển thành như sau AUTOCAD ( toàn bộ ký tự đã chuyển sang kiểu gõ tiếng Nhật ).
.....................

Chào bạn tuan_thietkedien!
Ví dụ minh họa chuyển từ kiểu gõ tiếng Anh sang kiểu gõ tiếng Nhật.
LISP chỉ chuyển các kí tự : "A" "B" "C" "D" "0" "1" "2" "8" "9" "-" sang kiểu gõ tiếng Nhật.
Bạn có thể bổ sung các kí tự khác vào biến list_tim list_thay.

(defun ReplaceString (str str1 str2 / m)
(setq m 0)
(while (setq m (vl-string-search str1 str m))
(setq str (vl-string-subst str2 str1 str m))
(setq m (1+ m))
) ;_ end of while
str
) ;_ end of defun

;;;TxtFR : Text Find and Replace
(defun c:TxtFR (/ list_tim list_thay ss i en ed str str_thay)
(setq list_tim (list "A" "B" "C" "D" "0" "1" "2" "8" "9" "-"))
(setq list_thay (list "A" "B" "C" "D" "0" "1" "2" "8" "9" "ー"))

(setq ss (ssget '((0 . "TEXT")))
i 0)

(while (< i (sslength ss))
(setq en (ssname ss i)
ed (entget en)
str (cdr (assoc 1 ed)) )
(foreach str_tim list_tim
(if (vl-string-search str_tim str)
(setq str_thay (nth (vl-position str_tim list_tim)list_thay )
str (ReplaceString str str_tim str_thay))
)
)
(setq ed (subst (cons 1 str) (assoc 1 ed) ed))
(entmod ed)
;;; (entupd (cdr (assoc -1 ed)))
(setq i (1+ i))
)
(gc)
)

  • 1

#57 tuan_thietkedien

tuan_thietkedien

    biết lệnh mirror

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

Đã gửi 23 March 2009 - 04:50 PM

Chào bạn tuan_thietkedien!
Ví dụ minh họa chuyển từ kiểu gõ tiếng Anh sang kiểu gõ tiếng Nhật.
LISP chỉ chuyển các kí tự : "A" "B" "C" "D" "0" "1" "2" "8" "9" "-" sang kiểu gõ tiếng Nhật.
Bạn có thể bổ sung các kí tự khác vào biến list_tim list_thay.

(defun ReplaceString (str str1 str2 / m)
(setq m 0)
(while (setq m (vl-string-search str1 str m))
(setq str (vl-string-subst str2 str1 str m))
(setq m (1+ m))
) ;_ end of while
str
) ;_ end of defun

;;;TxtFR : Text Find and Replace
(defun c:TxtFR (/ list_tim list_thay ss i en ed str str_thay)
(setq list_tim (list "A" "B" "C" "D" "0" "1" "2" "8" "9" "-"))
(setq list_thay (list "A" "B" "C" "D" "0" "1" "2" "8" "9" "ー"))

(setq ss (ssget '((0 . "TEXT")))
i 0)

(while (< i (sslength ss))
(setq en (ssname ss i)
ed (entget en)
str (cdr (assoc 1 ed)) )
(foreach str_tim list_tim
(if (vl-string-search str_tim str)
(setq str_thay (nth (vl-position str_tim list_tim)list_thay )
str (ReplaceString str str_tim str_thay))
)
)
(setq ed (subst (cons 1 str) (assoc 1 ed) ed))
(entmod ed)
;;; (entupd (cdr (assoc -1 ed)))
(setq i (1+ i))
)
(gc)
)


Chào bác gia_bach
Lisp mà bác viết cho em chạy Ok lắm, hoàn toàn đúng ý của em. Có vài chỗ, vài hàm mới em chưa biết nên sau khi em tìm hiểu nếu có gì không rõ mong bác chỉ thêm. Hầu như lisp dùng hàm vl- , mà mấy hàm này em lại mù tịt.
1 lần nữa xin cám ơn bác và mọi người đã nhiệt tình giúp đỡ.
:cry:
  • 0

#58 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 23 March 2009 - 05:08 PM

Chào bạn Tue_NV
Không hiểu sao khi mình dùng lệnh ed (ddedit) thì chữ CAD-2008 kiểu gõ Tiếng Nhật vẫn ra chữ CAD-2008 như bình thường. Dấu -, chữ số 2; 0; 8 vẫn hiện ra bình thường. Bạn thử xem lại máy đã cài font tiếng Nhật chưa ( trong Control Panel \ Regional and Language options ), bạn dùng đĩa cài WinXp bỏ vào ổ đĩa, sau đó vào đường dẫn mình đã chỉ rồi check vào cái ô mình khoanh tròn đỏ, sau đó nhấp Apply là cài được. Bạn cũng xem thử Text Style trong CAD có giống mình hay không nhe. Có lẽ vì thế mà máy của bạn nó thể hiện như vậy.

http://www.cadviet.c...les/Book2_2.xls

Sau khi bạn cài xong rồi xem lại thử xem có còn tình trạng như vậy hay không nhé.

@Bác gia_bach:
Em giải thích lý do làm cái lisp thay thế chữ này để bác hiểu thêm. Tất cả những bản vẽ công ty làm sẽ gửi qua bên Nhật, do đó họ yêu cầu dùng kiểu gõ tiếng Nhật. Vậy để đảm bảo tất cả text trong bản vẽ đều là kiểu gõ tiếng Nhật nên em muốn làm 1 lisp tự động tìm và thay thế tất cả những ký tự tiếng Anh thành những ký tự tiếng Nhật.
Khi tạo bất kỳ 1 text và nhập nội dung, bởi vì phải chuyển đổi giữa 2 kiểu gõ nên nhiều khi sẽ có sơ suất. Ví dụ như text có nội dung AUTOCAD là không được vì lẫn lộn có kiểu gõ tiếng Anh ( chữ AU và CAD là kiểu gõ tiếng Anh). Sau khi dùng lisp sẽ chuyển thành như sau AUTOCAD ( toàn bộ ký tự đã chuyển sang kiểu gõ tiếng Nhật ).
Do đó nếu text có nội dung "A là B" ---> kết quả nhận được "1 là 2" thì đúng là kết quả không được mong đợi nhưng mục đích chính của em là cái lisp thứ 2, cái lisp 1 em chỉ làm thử nghiệm thôi.
Cái lisp của bác sửa lại cho em chạy rất OK nhưng ý của em là muốn lisp kiểm tra từng ký tự trong nội dung của tập hợp các text được chọn rồi sẽ thay thế luôn. Và nội dung text thì rất là nhiều chứ không chỉ lúc nào cũng là CAD-2008, cái này em chỉ nêu ra làm ví dụ thôi.

Nếu có gì chưa hiểu rõ thì bác gia_bach và bạn Tue_NV hỏi thêm nha.
Xin cám ơn đã nhiệt tình giúp đỡ.

Chào bạn Tuanthietkedien
Mình đã cài rồi mà tại sao cái chữ CAD-2008 Tiếng Nhật vẫn không hiện được
chữ CAD-2008 tiếng Nhật nó ra như cũ thế này : \M+18262\M+18260\M+18263\M+1815B\M+18251\M+1824F\M+1824F\M+18257
và theo mình suy luận như trên :
Tức là chữ C trong tiếng Nhựt tương đương với chữ \M+18262 (trong tiếng Anh)
Tức là chữ A trong tiếng Nhựt tương đương với chữ \M+18260 (trong tiếng Anh)
Tức là chữ D trong tiếng Nhựt tương đương với chữ \M+18263 (trong tiếng Anh)
Không hiểu sao chữ Nhật nó không hiện. Và mình đã viết đoạn Lisp này và đã chạy thành công.
Bạn thử xem nhé :
(defun c:STRR()
(Setq stri (entget(car(entsel))))
(setq str (cdr(assoc 1 stri)))
(setq n (strlen str) i 1 te "")
(while (<= i n)

(setq te1 (substr str i 1))

(if (= te1 "A") (setq te1 "\\M+18260"))
(if (= te1 "B") (setq te1 "\\M+18261"))
(if (= te1 "C") (setq te1 "\\M+18262"))
(if (= te1 "D") (setq te1 "\\M+18263"))
(setq te (strcat te te1))

(setq i (+ i 1))

)

(setq stri (subst (cons 1 te) (assoc 1 stri) stri))
(entmod stri)
)
LISP chỉ chuyển các kí tự : "A" "B" "C" "D" tiếng Anh sang kiểu gõ tiếng Nhựt.
Cái chữ \\M+18260 chính là chữ "A" trong tiếng Nhựt đó.

Dòng (if (= te1 "A") (setq te1 "\\M+18260"))
thì "A" là kí tự tìm thấy và "\\M+18260" (chính là chữ "A") tiếng Nhựt.
Và bạn hãy thay "\\M+18260" (chữ "A") của Tiếng Nhật do mình bị lỗi Font

Bạn hãy bổ sung thêm kí tự tìm thấy và kí tự thay thế để hoàn thành tốt công việc của bạn.

Bạn hãy chạy thử và cho biết ý kiến nhé.
Chúc thành công. :cry:
  • 1

#59 tuan_thietkedien

tuan_thietkedien

    biết lệnh mirror

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

Đã gửi 24 March 2009 - 10:35 AM

Chào bạn Tuanthietkedien
Mình đã cài rồi mà tại sao cái chữ CAD-2008 Tiếng Nhật vẫn không hiện được
chữ CAD-2008 tiếng Nhật nó ra như cũ thế này : \M+18262\M+18260\M+18263\M+1815B\M+18251\M+1824F\M+1824F\M+18257
và theo mình suy luận như trên :
Tức là chữ C trong tiếng Nhựt tương đương với chữ \M+18262 (trong tiếng Anh)
Tức là chữ A trong tiếng Nhựt tương đương với chữ \M+18260 (trong tiếng Anh)
Tức là chữ D trong tiếng Nhựt tương đương với chữ \M+18263 (trong tiếng Anh)
Không hiểu sao chữ Nhật nó không hiện. Và mình đã viết đoạn Lisp này và đã chạy thành công.
Bạn thử xem nhé :

(defun c:STRR()
(Setq stri (entget(car(entsel))))
(setq str (cdr(assoc 1 stri)))
(setq n (strlen str) i 1 te "")
(while (<= i n)

(setq te1 (substr str i 1))

(if (= te1 "A") (setq te1 "\\M+18260"))
(if (= te1 "B") (setq te1 "\\M+18261"))
(if (= te1 "C") (setq te1 "\\M+18262"))
(if (= te1 "D") (setq te1 "\\M+18263"))
(setq te (strcat te te1))

(setq i (+ i 1))

)

(setq stri (subst (cons 1 te) (assoc 1 stri) stri))
(entmod stri)
)
LISP chỉ chuyển các kí tự : "A" "B" "C" "D" tiếng Anh sang kiểu gõ tiếng Nhựt.
Cái chữ \\M+18260 chính là chữ "A" trong tiếng Nhựt đó.

Dòng (if (= te1 "A") (setq te1 "\\M+18260"))
thì "A" là kí tự tìm thấy và "\\M+18260" (chính là chữ "A") tiếng Nhựt.
Và bạn hãy thay "\\M+18260" (chữ "A") của Tiếng Nhật do mình bị lỗi Font

Bạn hãy bổ sung thêm kí tự tìm thấy và kí tự thay thế để hoàn thành tốt công việc của bạn.

Bạn hãy chạy thử và cho biết ý kiến nhé.
Chúc thành công. :cry:


Chào bạn Tue_NV
Hôm nay mình hơi bận nên sau khi mình dùng thử liền sẽ nhắn bạn biết kết quả nha.
Cám ơn bạn nhiều và chúc bạn thành công.
:cry:
  • 0

#60 tuan_thietkedien

tuan_thietkedien

    biết lệnh mirror

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

Đã gửi 25 March 2009 - 08:50 AM

LISP chỉ chuyển các kí tự : "A" "B" "C" "D" tiếng Anh sang kiểu gõ tiếng Nhựt.
Cái chữ \\M+18260 chính là chữ "A" trong tiếng Nhựt đó.

Dòng (if (= te1 "A") (setq te1 "\\M+18260"))
thì "A" là kí tự tìm thấy và "\\M+18260" (chính là chữ "A") tiếng Nhựt.
Và bạn hãy thay "\\M+18260" (chữ "A") của Tiếng Nhật do mình bị lỗi Font

Bạn hãy bổ sung thêm kí tự tìm thấy và kí tự thay thế để hoàn thành tốt công việc của bạn.

Bạn hãy chạy thử và cho biết ý kiến nhé.
Chúc thành công. :cry:


Chào bạn Tue_NV
Lisp bạn viết chạy Ok lắm, nó vẫn thể hiện tiếng Nhật như bình thường. Hiện tại mình dùng Cad2004, không biết bạn dùng Cad bao nhiêu.
Mình đã thử viết thêm vài dòng để lisp ứng dụng cho 1 tập hợp text, khi này mình dùng thêm 1 vòng while để xét từng text thì không hiểu sao không chạy được, không biết có phải do 2 cái vòng while cùng chạy là không được hay không.
Bạn góp ý cho mình với nhé.
  • 0