Chuyển đến nội dung
Diễn đàn CADViet
Đăng nhập để thực hiện theo  
gia_bach

Chuyển từ text số thành text chữ tiếng Việt.

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

Ứng dụng của AutoCAD .NET API thực hiện việc Chuyển từ text số thành text chữ tiếng Việt.

 

Sử dụng thư viện Chuyển số thành chữ bên caulacbovb.net : LInk

 

Cách sử dụng :

1. giải nén và copy file "Number2String.dll" vào hệ thống(đĩa cứng, USB, ...).

2. Khởi động AutoCAD, open file Cad cần chuyển .

3. Tại dấu nhắc (Command ) của CAD gõ lệnh NETLOAD và chỉ đến vị trí file "Number2String.dll" vừa copy ở buớc 1, chọn OPEN để hoàn thành lệnh NETLOAD .

4. gõ lệnh n2s để bắt đầu ...

(Nếu bạn đã quen với AutoLisp, các buớc 1-2-4 tuơng tự như cách load 1 ứng dụng AutoLisp, chỉ thay lệnh APPLOAD bằng lệnh NETLOAD ở buớc 3.)

 

Ngoài ra "Number2String.dll" còn cùng cấp hàm LISP Number2String để ứng dụng trong Lập trình LISP.

Cách sử dụng :

1. Cú pháp : (Number2String str)

- trong đó str là kiểu chuỗi (string)

Chú ý : kí hiệu thập phân chỉ chấp nhận hoăc là dấu phấy "," hoặc dấu chấm "." (không chấp nhận vừa dấu phẩy vừa dấu chấm, VD: 123.456,8 )

- giá trị trả về là lisp chứa kết quả tiếng Việt (bảng mã Unicode) hoặc NIL

 

2.VD :

- (car(Number2String "13964.8")) -> Mười ba nghìn chín trăm sáu mươi bốn phảy tám

- (car(Number2String "237,5")) -> Hai trăm ba mươi bảy phảy năm

- (Number2String "4.237,5") -> nil

 

Hàm Lisp tham khảo :

Nhớ chép file "Number2String.dll" vào đuờng dẫn Autocad Support file search Path.

(defun C:test1(/ ds e fil i res ss str);
 (if (and (setq fil (findfile "Number2String.dll"))
(vl-cmdf "_.netLoad" fil)
(setq ss (ssget "_:L" (list (cons 0 "Text"))))  )
(progn
 	(setq i -1)
 	(while (setq e (ssname ss (setq i (1+ i))))
(setq ds (entget e)
  	str (cdr (assoc 1 ds)))
(if (setq res (Number2String str) )
  (entmod (subst (cons 1 (strcat str " (" (car res ) ")") )(assoc 1 ds) ds)) )  ))
(princ "\nError found."))
 (princ))
(defun C:test(/ ss res fil)
 (if (and (setq fil (findfile "Number2String.dll"))
(vl-cmdf "_.netLoad" fil) )
(while (setq ss (ssget "_+.:S:E" (list (cons 0 "Text"))))
 	(if (setq res (Number2String (cdr (assoc 1 (entget (ssname ss 0))))) )
(princ (car res ))
(princ "\nKhong phai so!")))
(princ "\nFile not found.")	)
 (princ))

 

 

Link bao gồm SourceCode : click here

  • Vote tăng 4

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

Ứng dụng của AutoCAD .NET API thực hiện việc Chuyển từ text số thành text chữ tiếng Việt.

 

Sử dụng thư viện Chuyển số thành chữ bên caulacbovb.net : LInk

 

Cách sử dụng :

1. giải nén và copy file "Number2String.dll" vào hệ thống(đĩa cứng, USB, ...).

2. Khởi động AutoCAD, open file Cad cần chuyển .

3. Tại dấu nhắc (Command ) của CAD gõ lệnh NETLOAD và chỉ đến vị trí file "Number2String.dll" vừa copy ở buớc 1, chọn OPEN để hoàn thành lệnh NETLOAD .

4. gõ lệnh n2s để bắt đầu ...

(Nếu bạn đã quen với AutoLisp, các buớc 1-2-4 tuơng tự như cách load 1 ứng dụng AutoLisp, chỉ thay lệnh APPLOAD bằng lệnh NETLOAD ở buớc 3.)

 

Ngoài ra "Number2String.dll" còn cùng cấp hàm LISP Number2String để ứng dụng trong Lập trình LISP.

Cách sử dụng :

1. Cú pháp : (Number2String str)

- trong đó str là kiểu chuỗi (string)

Chú ý : kí hiệu thập phân chỉ chấp nhận hoăc là dấu phấy "," hoặc dấu chấm "." (không chấp nhận vừa dấu phẩy vừa dấu chấm, VD: 123.456,8 )

- giá trị trả về là lisp chứa kết quả tiếng Việt (bảng mã Unicode) hoặc NIL

 

2.VD :

- (car(Number2String "13964.8")) -> Mười ba nghìn chín trăm sáu mươi bốn phảy tám

- (car(Number2String "237,5")) -> Hai trăm ba mươi bảy phảy năm

- (Number2String "4.237,5") -> nil

 

Hàm Lisp tham khảo :

Nhớ chép file "Number2String.dll" vào đuờng dẫn Autocad Support file search Path.

(defun C:test1(/ ds e fil i res ss str);
 (if (and (setq fil (findfile "Number2String.dll"))
(vl-cmdf "_.netLoad" fil)
(setq ss (ssget "_:L" (list (cons 0 "Text"))))  )
(progn
 	(setq i -1)
 	(while (setq e (ssname ss (setq i (1+ i))))
(setq ds (entget e)
  	str (cdr (assoc 1 ds)))
(if (setq res (Number2String str) )
  (entmod (subst (cons 1 (strcat str " (" (car res ) ")") )(assoc 1 ds) ds)) )  ))
(princ "\nError found."))
 (princ))
(defun C:test(/ ss res fil)
 (if (and (setq fil (findfile "Number2String.dll"))
(vl-cmdf "_.netLoad" fil) )
(while (setq ss (ssget "_+.:S:E" (list (cons 0 "Text"))))
 	(if (setq res (Number2String (cdr (assoc 1 (entget (ssname ss 0))))) )
(princ (car res ))
(princ "\nKhong phai so!")))
(princ "\nFile not found.")	)
 (princ))

 

 

Link bao gồm SourceCode : click here

Code chạy tốt lắm. Tuy nhiên, có 1 số trường hợp anh ạ:

2002 : Chương trình đọc là : Hai nghìn hai

-> Đúng phải là : Hai nghìn không trăm lẻ hai

2002,002 Chương trình đọc là : Hai nghìn hai phảy không không hai

-> Đúng phải là : Hai nghìn không trăm lẻ hai phẩy không trăm lẻ hai

 

Cảm ơn anh gia_bach rất nhiều. Chúc anh luôn khoẻ

  • Vote tăng 1

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

Code chạy tốt lắm. Tuy nhiên, có 1 số trường hợp anh ạ:

2002 : Chương trình đọc là : Hai nghìn hai

-> Đúng phải là : Hai nghìn không trăm lẻ hai

2002,002 Chương trình đọc là : Hai nghìn hai phảy không không hai

-> Đúng phải là : Hai nghìn không trăm lẻ hai phẩy không trăm lẻ hai

 

Cảm ơn anh gia_bach rất nhiều. Chúc anh luôn khoẻ

Thanks Tuệ đã góp ý.

Anh cũng thấy 1 số t/hợp không đúng lắm, nhưng cái này sử dụng thư viện của người khác nên có sao dùng vậy.

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

Thanks Tuệ đã góp ý.

Anh cũng thấy 1 số t/hợp không đúng lắm, nhưng cái này sử dụng thư viện của người khác nên có sao dùng vậy.

Nói chung là tốt bác ạ! Nhưng nói riêng cũng hơi... say xỉn tí. Nhưng bác sử dụng thư viện của người khác nên có sao dùng vậy thôi. Ngoài việc lùng bùng vì các con số 0 thì nó xài tiền Zămbuê không rành lắm.

Ví dụ: 1111111111111

Người Zămbuê đọc: Một nghìn một trăm mười một tỷ một trăm mười một triệu một trăm mười một nghìn một trăm mười một.

Nó đọc: Một nghìn tỷ một trăm mười một tỷ một trăm mười một triệu một trăm mười một nghìn một trăm mười một

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

Hê.. Thú thực với bác gia_bach hôm qua e cũng bookmark cái này về định xài LateBinding, không ngờ bác đã chiến rồi ^^

Nói chung là có rất nhiều phương án để lựa chọn. Tks bác rất nhiều.

 

P/s : E có 1 câu hỏi ngoài lề chưa biết để đâu, tiện đây e hỏi luôn, k hiểu sao các bước tạo lispfunction của e toàn bị lỗi (báo lỗi chưa nhận lệnh), kể cả đơn giản nhất, k biết có phải thao tác cần gì đó k?? Hoặc bác cho e xin 1 ví dụ đơn giản như 1 file dll lispfunction alert ra màn hình + trả về string alert ?

Nếu được bác post ở bên Hướng dẫn LT thì e xóa bài này đi cho đỡ loãng ^^

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

.....

Ví dụ: 1111111111111

Người Zămbuê đọc: Một nghìn một trăm mười một tỷ một trăm mười một triệu một trăm mười một nghìn một trăm mười một.

Nó đọc: Một nghìn tỷ một trăm mười một tỷ một trăm mười một triệu một trăm mười một nghìn một trăm mười một

Nói chung các open source-code chỉ là ví dụ tham khảo thêm, muốn sử dụng tốt cần phải đầu tư thêm nhiều thời gian và test cẩn thận.

 

...

Hoặc bác cho e xin 1 ví dụ đơn giản như 1 file dll lispfunction alert ra màn hình + trả về string alert ?

Ket tham khảo trong code nhé.

  • Vote tăng 1

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

Nói chung các open source-code chỉ là ví dụ tham khảo thêm, muốn sử dụng tốt cần phải đầu tư thêm nhiều thời gian và test cẩn thận.

......

Em định tận dụng cái Add-on có sẳn trong Excel -> khỏi phải đầu tư nhiều thời gian anh ạ

Ý tưởng của em là :

1./ Tạo 1 Bảng Excel có sẳn trong đó chứa các công thức xử lý chuỗi -> Cho ra kết quả như mình mong muốn.

2./ Vào CAD chọn 1 Text số -> Ghi số đã chọn vào ô Cell để Excel xử lý -> Có kết quả

3./ Khi có kết quả từ Excel rồi -> Lấy kết quả đó nhập vào CAD

- Ở bước 1 em đã làm được rồi. Excel đọc số sang chữ ngon lành.

- Bước 2 : Em đã sử dụng Lisp WriteToExcel của anh ghi vào Excel. Tuy nhiên, Lisp WriteToExcel luôn tạo ra 1 file Excel mới. Có cách nào ghi data vào 1 file Excel có sẵn không anh?

- Nếu xử lý được bước 2, em hoàn toàn có thể xử lý được bước 3

File WriteToExcel của anh ở đây : http://www.cadviet.com/forum/index.php?showtopic=407&st=140

Nếu có thể, anh có thể giúp em vấn đề trên ở topic AutoCAD với ExCel, nếu không lạc topic mất

Chân thành cảm ơn anh.

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

Sao k đảo bước 1 và bước 2 với nhau bác nhỉ :o

Bước 1 và bước 2 thực ra có đảo hay không đảo cũng như nhau thôi.

 

Cái Add-on đấy mình lấy trên CADVIET mình, chỉ dành cho dân dự toán và kế toán, đọc ra chỉ tới hàng đơn vị thôi, phần thập phân thì không đọc. Cho nên, đã xử lý bằng hàm chuỗi và số trong Excel (cũng hơi dài), kết quả đọc OK. Tuy nhiên chỉ đọc tới hàng trăm tỷ thôi, hàng nghìn tỷ (chưa có đơn vị) nên không đọc được. Mình thấy đó cũng hợp lý (vì chắc chi đã sài đến hàng nghìn tỷ. hì hì)

Ghi số vào Excel sẵn có cũng là vì thế ^ ^.

Có Excel để Excel xử lý kết quả luôn. Mình chỉ lấy kết quả là xong.

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ức là nếu sử dụng thành 1 add-on viết bằng VBA hoàn chỉnh thì cứ xuất chuỗi rồi add cái xla vào cũng có sao đâu ạ ^^ Như bác nói thì e Dự là bác đang xử lý trực tiếp bằng công thức trong các ô, chứ k còn là Add In add on gì nữa ^^ Đúng k ạ ^^

 

P/s : luôn ghi theo 1 cột và là cột đầu, hay là phải chỉ định tọa độ Cell ạ ?

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ức là nếu sử dụng thành 1 add-on viết bằng VBA hoàn chỉnh thì cứ xuất chuỗi rồi add cái xla vào cũng có sao đâu ạ ^^

Như bác nói thì e Dự là bác đang xử lý trực tiếp bằng công thức trong các ô, chứ k còn là Add In add on gì nữa ^^ Đúng k ạ ^^

P/s : luôn ghi theo 1 cột và là cột đầu, hay là phải chỉ định tọa độ Cell ạ ?

Tại mình không rành VBA nên mới đi lòng vòng thế. Nếu để 1 người là tác giả của bản add-on trên xử lý luôn thì tuyệt quá.

Với lại, sẽ mất khá nhiều thời gian để viết chương trình này hoàn chỉnh đấy (Lisp hay VBA gì cũng thế). Cái cần là hiệu quả công việc, phải không bạn?

Dầu sao đến được đích là OK.

 

* Đúng rồi KetXu à. Có dữ liệu số nhập vào, ta xử lý các Cell còn lại. Cái mình lấy là 1 Cell chứa kết quả là chữ cần đọc ra. Tuy nhiên, vẫn dựa vào add-ins đọc số thành chữ trong Excel để xử lý, vì add-ins chỉ đọc tới hàng đơn vị mà thôi.

 

P/S: Mình chỉ định tọa độ Cell. Có thể lấy luôn Column đầu tiên là Cột chứa dữ liệu Input, các cell chứa dữ liệu trung gian và cả cell chứa kết quả

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

Bác lấy cái này của TC được ạ

http://web2.iadfw.ne...SP/GetExcel.lsp

Thanks KetXu!

Hôm qua, Tue_NV cũng lọ mọ thử cái này trong topic AutoCAD với Excel.

Sử dụng hàm PutCell mãi không được. Nó cứ trả về ; error: bad argument type: VLA-OBJECT nil

Chỉ vì lý do là file Excel đó chưa open

Chừ thì ổn rồi.. Ý tưởng đã có, Add-ins đọc số sang chữ thì OK rồi. Giờ chỉ còn mong có thời gian rỗi -> bắt tay làm 1 ứng dụng này nữa thôi.

Thanks

  • Vote tăng 1

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

Em cũng góp vui 1 cái (bao gồm source code)

Download Here

Thanks!

Chào Detail

Tue_NV Test một số trường hợp thì thấy chưa đúng :

15100 : Chương trình đọc là : một trăm năm mươi mốt

15000 : Chương trình đọc là : Mười lăm

15000.90 : Chương trình đọc là : mười lăm ngàn không trăm phẩy chín

15000000 : Chương trình đọc là : Mười lăm

15100.902 : Chương trình đọc là : mười lăm ngàn một trăm phẩy chín

..........

Chương trình bạn hình như chỉ đọc được số số lẻ thập phân tối đa là 2.

3 số lẻ thập phân thì chịu rồi

  • Vote tăng 1

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

Chào Detail

Tue_NV Test một số trường hợp thì thấy chưa đúng :

15100 : Chương trình đọc là : một trăm năm mươi mốt

15000 : Chương trình đọc là : Mười lăm

15000.90 : Chương trình đọc là : mười lăm ngàn không trăm phẩy chín

15000000 : Chương trình đọc là : Mười lăm

15100.902 : Chương trình đọc là : mười lăm ngàn một trăm phẩy chín

..........

Chương trình bạn hình như chỉ đọc được số số lẻ thập phân tối đa là 2.

3 số lẻ thập phân thì chịu rồi

Thanks Tue_NV

$$ thì ít khi nào tới 3 số lẻ nên mình chỉ để 2 số thôi

Đã update lại link ở post trên.

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

Bình thường số 0,00007 thì đọc ntn ? 0,00000000000001 thì máy đọc là gì nhỉ ^^

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

Bình thường số 0,00007 thì đọc ntn : không phẩy không không không không bảy

0,00000000000001 thì máy đọc là gì nhỉ ^^ : không phẩy không .. ... một

Cách đơn giản nhất

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

Update :

Vẫn còn 2 vấn đề chưa hài lòng :

- t/hợp phần nguyên lớn hơn 18 chữ số (tỉ tỉ) : chưa biết cách biểu diễn

- với phần thập phân chọn cách đọc đơn giản nhất :

+ 0,00007 -> không phẩy không không không không bảy

+ 0,00000000000001-> không phẩy không .. ... một

 

Mời mọi nguời test và góp ý : NumberToString.zip

  • Vote tăng 1

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

Cái Add-on đấy mình lấy trên CADVIET mình, chỉ dành cho dân dự toán và kế toán, đọc ra chỉ tới hàng đơn vị thôi, phần thập phân thì không đọc. Cho nên, đã xử lý bằng hàm chuỗi và số trong Excel (cũng hơi dài), kết quả đọc OK. Tuy nhiên chỉ đọc tới hàng trăm tỷ thôi, hàng nghìn tỷ (chưa có đơn vị) nên không đọc được. Mình thấy đó cũng hợp lý (vì chắc chi đã sài đến hàng nghìn tỷ. hì hì)

Ghi số vào Excel sẵn có cũng là vì thế ^ ^.

Có Excel để Excel xử lý kết quả luôn. Mình chỉ lấy kết quả là xong.

______________________________

 

screen doors retractable|4life transfer factor tri-factor

Sau 1 hồi nghiên cứu và quá trình lâu dài theo dõi, phát hiện đồng chí này chuyên re-post lại những bài rl trước đó - Nhiều khi không hề ăn nhập với chuyện đang nói => Khả năng là 1 acc spam công nghệ cao => Ketxu mời nick này vào spam list ^^

  • Vote tăng 1

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
Đăng nhập để thực hiện theo  

×