Đến nội dung


Hình ảnh
- - - - -

[Cần giúp đỡ] Tính số lượng chữ cái font UniCode


  • Please log in to reply
11 replies to this topic

#1 anonmyous

anonmyous

    biết vẽ arc

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

Đã gửi 29 May 2012 - 04:36 PM

Hôm nay tui có viết một đoạn mã trong đó cần đếm số lượng chữ cái, vấn đề nó là thế này :
- Nếu chữ không dấu "dat dao" chẳng hạn, thì hàm (strlen "dat dao") = 7 -> OK
- Nếu chữ theo font Unicode, nhìn vào thì nó là (strlen "đất đào") nhưng thực sự nó lại hiểu là (strlen "\U+0111\U+1EA5t \U+0111\U+00E0o") và kết quả là bằng 31.
Bác nào giúp hộ đoạn mã tính chiều dài của một chuỗi bất kì, có thể chữ không dấu, cũng có thể chữ dùng font Unicode hộ mình với
  • 0

#2 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 29 May 2012 - 04:47 PM

1). Tức là bạn muốn "đất đào" phải bằng 7, giống như "dat dao", hay 31 (nếu nhập vào), hay 25 nếu chọn đối tượng?
2). String đó nhập vào hay chọn trên bản vẽ, dạng unicode hay hecxa?
  • 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.


#3 Thaistreetz

Thaistreetz

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 903 Bài viết
Điểm đánh giá: 505 (tốt)

Đã gửi 29 May 2012 - 06:32 PM

bạn duyệt từ đầu đến đít chuỗi bằng while. mỗi lần lấy 1 ký tự.
- Nếu kí tự đó là "\" thì đọc tiếp ký tự kế tiếp.
+ Nếu ký tự kế tiếp là "U" thì chắc chắn đó là 1 ký tự unicode. nhảy 1 fát 7 bước để duyệt tiếp và biến đếm tăng 1 đơn vị
+ Nếu ký tự kế tiếp là "n" hoặc "P" hoặc "t" hoặc """ hoặc "\"thì nhảy 1 fát 2 bước để duyệt tiếp và biến đếm tăng 1 đơn vị
+ Nếu khác 2 trường hợp trên thì nó là 1 ký tự bình thường. biến đếm tăng 1
Giá trị của biến đếm cuối cùng là chiều dài thực của chuỗi
  • 1

Hình đã gửi
IN HIM, I TRUST. THE TRUST IN MY GOD


#4 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

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

Đã gửi 29 May 2012 - 06:46 PM

Làm 1 hàm count số lượng xuất hiện "\U+", giả sử là hàm u_count

Số lượng ký tự thực tế bằng
(- (strlen str) (* 6 (u_count str))

  • 0

#5 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 29 May 2012 - 10:14 PM

@Bác Thái: giả sử chuỗi xét là "\Ua" ?
@Bác Hoành: giả sử chuỗi xét là "\U+a" ?
Có lẽ do các bác mãi quan tâm đến "\U" và "\U+" quá mà quên mất các trường hợp đặc biệt chăng?
  • 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.


#6 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 29 May 2012 - 11:18 PM

Nếu là chọn text trên màn hình thì sẽ nhàn hơn nhiều đó bạn :D
  • 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


#7 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 30 May 2012 - 06:17 AM

@Bác Thái: giả sử chuỗi xét là "\Ua" ?
@Bác Hoành: giả sử chuỗi xét là "\U+a" ?
Có lẽ do các bác mãi quan tâm đến "\U" và "\U+" quá mà quên mất các trường hợp đặc biệt chăng?

Theo Tue_NV, trường hợp bác nêu thì chuỗi "\Ua" hoặc là chuỗi "\U+a" không có trong Tiếng Việt,
Bạn chủ topic đang đếm "Tiếng Việt" nên có thể chấp nhận được. ;)

Hoặc có thể dùng cách chuyển mã Unicode sang mã khác (TCVN chẳng hạn) rồi đếm. Tue_NV chưa thử, nhưng chắc là được
  • 1

#8 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 30 May 2012 - 06:28 AM

Theo Tue_NV, trường hợp bác nêu thì chuỗi "\Ua" hoặc là chuỗi "\U+a" không có trong Tiếng Việt,
Bạn chủ topic đang đếm "Tiếng Việt" nên có thể chấp nhận được. ;)
Hoặc có thể dùng cách chuyển mã Unicode sang mã khác (TCVN chẳng hạn) rồi đếm. Tue_NV chưa thử, nhưng chắc là được

1). Chủ topic nói rõ là:cần đếm số lượng chữ cái, có thể chữ không dấu, cũng có thể chữ dùng font Unicode; không nói đều là tiếng Việt.
2).Ý tưởng chuyển qua TCVN chắc được.
  • 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 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 30 May 2012 - 06:36 AM

1). Chủ topic nói rõ là:cần đếm số lượng chữ cái, có thể chữ không dấu, cũng có thể chữ dùng font Unicode; không nói đều là tiếng Việt.
2).Ý tưởng chuyển qua TCVN chắc được.

1) Thế thì khi nào mà (= "\U" "UU") hoặc (= "\U+" "UU+") -> trả về T thì chắc chắn đó là Unicode rồi. Vì chắc là không có ai viết "UU" bằng "\U" hoặc không viết "UU+" bằng "\U+" đâu bác nhỉ??
Cách xác định còn lại như các bác trên đã trình bày rồi.
  • 1

#10 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 30 May 2012 - 07:02 AM

1) Thế thì khi nào mà (= "\U" "UU") hoặc (= "\U+" "UU+") -> trả về T thì chắc chắn đó là Unicode rồi. Vì chắc là không có ai viết "UU" bằng "\U" hoặc không viết "UU+" bằng "\U+" đâu bác nhỉ??
Cách xác định còn lại như các bác trên đã trình bày rồi.

Tôi nghĩ cách lúa nhất có thể lại là cách tốt nhất, không cấm đoán rào giậu gì cả: đó là cứ lập list các từ tiếng Việt có dấu ă, á, à, đ... (bằng 7 ký tự hecxa), đưa chúng vào list, sau đó duyệt chuỗi. Cái nào giống thì biến đếm tăng 1. Thế chắc ổn?
  • 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.


#11 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 30 May 2012 - 04:15 PM

Nếu là chọn text trên màn hình thì sẽ nhàn hơn nhiều đó bạn :D


(strlen (vla-get-textstring textObj))

  • 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


#12 anonmyous

anonmyous

    biết vẽ arc

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

Đã gửi 30 May 2012 - 09:38 PM

Thực ra chuỗi cần tính của mình nó phát sinh trong quá trình chạy LISP & cũng chỉ dùng để qui định các thành phần đo vẽ thôi, cho nên search đếm cái dấu "\" rồi trừ nó ra cũng đủ rồi.
Thanks các bác đã tư vấn giúp
  • 0