intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Sắp xếp tiếng Việt theo vần

Chia sẻ: Nguyễn Phương Linh Phương | Ngày: | Loại File: PDF | Số trang:10

123
lượt xem
11
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Trong thực tế việc sắp xếp tiếng Việt dựa trên chủ ý của người lập trình hay tiện ích. Thường cách sắp xếp thứ tự tiếng Việt theo các ký tự từ trái sang phải. Ví dụ, với các chữ Bang, Bách, Bắc, Bằng - theo cách sắp thứ tự thông thường (từ trái sang phải) thì sắp B (ngang nhau), kế đến là a, á, ắ, ằ, sau đó là n, c... Và cứ thế cuối cùng thứ tự sắp sẽ là: Bang, Bách, Bằng, Bắc....

Chủ đề:
Lưu

Nội dung Text: Sắp xếp tiếng Việt theo vần

  1. Sắp xếp tiếng Việt theo vần rong thực tế việc sắp xếp tiếng Việt dựa trên chủ ý của người lập trình hay tiện ích. Thường cách sắp xếp thứ tự tiếng Việt theo các ký tự từ trái sang phải. Ví dụ, với các chữ Bang, Bách, Bắc, Bằng - theo cách sắp thứ tự thông thường (từ trái sang phải) thì sắp B (ngang nhau), kế đến là a, á, ắ, ằ, sau đó là n, c... Và cứ thế cuối cùng thứ tự sắp sẽ là: Bang, Bách, Bằng, Bắc. Trình tự sắp xếp như trên không đúng thứ tự vần tiếng Việt. Thứ tự đúng theo vần phải là: Bách, Bắc, Bang, Bằng - có nghĩa là bỏ sắp dấu sau cùng. Trước đây tác giả cũng đã nhầm về vấn đề này (Xem bài 'Sắp xếp tiếng Việt Unicode trong MS Access' - TGVT A tháng 12/2004, t.140), và rất nhiều chương
  2. trình và tiện ích khác cũng thực hiện cách sắp theo ký tự từ trái sang phải. Qua quá trình tìm hiểu tôi đã tìm ra một cách có thể giải quyết vấn đề này. Cách này sử dụng với font Unicode, nên xem lại bài viết 'Sắp xếp tiếng Việt Unicode trong MS Access'. Trong một bài viết có đề cập tới hai hàm Mahoa và Daonguoc, ở đây tôi thay bằng hai hàm Chuanhoa và Mahoa. Bước 1: Chuẩn bị Đặt hai Textbox lên form: ➢ Textbox1 đặt tên là TextGockdau, nhập trực tiếp chuỗi ký tự Việt Unicode sau (có thể nhập trong Word và copy sang): 'AaĂăÂâBbCcDdĐđEeÊêFfGgHhIiJjKkLlMmNnOo
  3. ÔôƠơPpQqRrSsTtU uƯưVvWwXxYyZz' ➢ Textbox2 đặt tên là TextGocCdau, nhập trực tiếp chuỗi ký tự Việt Unicode sau: 'AÀẢÃÁẠĂẰẲẴẮẶÂẦẨẪẤẬEÈẺẼÉẸÊỀỂỄẾỆIÌỈ ĨÍỊOÒỎÕÓỌÔỒỔỖỐỘ ƠỜỞỠỚỢUÙỦŨÚỤƯỪỬỮỨỰYỲỶỸÝỴaàảãáạăằ ẳẵắặâầẩẫấậeèẻẽ éẹêềểễếệiìỉĩíịoòỏõóọôồổỗốộơờởỡớợuùủũúụưừửữứựy ỳỷỹýỵ' Sau đó xuất thành file ForChuama.frm. Thực ra tôi muốn giấu form này trong giao diện thiết kế của Access, các bạn có thể dùng một form tạm để chứa hai chuỗi trên. Bước 2: Tiến hành như bài viết 'Sắp xếp tiếng Việt
  4. Unicode trong MS Access'. Bước 3: Bước này quyết định việc sắp xếp theo vần. Việc giải quyết dựa trên hàm Chuanhoa, hàm Mahoa có tác dụng đảo ngược chuỗi họ tên đồng thời gọi hàm Chuanhoa để chuẩn hoá chuỗi họ tên đó. Private Function Chuanhoa(CChuanma As String) As String Dim Kq, kti As String Dim vt1, vt2, i As Integer
  5. Dim CgocKdau, Cma1 As String, CgocCdau, xd, Cma2 As String CgocCdau = ForChuama.TextGocCdau.Text Cma1 = 'aaacaeaoaqaybkbmbocaccckabadafaparazblbnbpcb cdcl1b1c1d1e1f1a' CgocKdau = ForChuama.TextGockdau.Text Cma2 = 'aaabacadaeafagahaiajakalamanaoapaqarasatauavawa xayaz babbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvb wbxbybzcacbcc cdcecfcgchcicjckclcmcn'
  6. Kq = '' xd = '' For i = 1 To Len(CChuanma) kti = Mid(CChuanma, i, 1) vt1 = InStr(CgocCdau, kti) If vt1 0 Then 'Nếu ký tự có dấu Kq = Kq & Mid(Cma1, 1 + ((vt1 - 1) \ 6) * 2, 2) 'Chuẩn hoá phần ký tự xd = xd & Mid(Cma1, 49 + ((4 + vt1) Mod 6) * 2, 2) ' Chuẩn hoá phần dấu Else
  7. vt2 = InStr(CgocKdau, kti) If vt2 0 Then Kq = Kq & Mid(Cma2, vt2 * 2 - 1, 2) Else Kq = Kq + kti End If End If Next i Chuanhoa = Kq & xd
  8. End Function Public Function Mahoa(ChuoiHoten As String) As String Dim vt1 As Integer Dim Kq As String, Ctam As String ChuoiHoten = Trim(ChuoiHoten) & ' ' Kq = '' vt1 = InStr(ChuoiHoten, ' ') Do While vt1 0 Ctam = Trim(Left(ChuoiHoten, vt1 - 1))
  9. ChuoiHoten = Right(ChuoiHoten, Len(ChuoiHoten) - vt1) Kq = Chuanhoa(Ctam) & ' ' & Kq vt1 = InStr(ChuoiHoten, ' ') Loop Mahoa = Kq End Function Ở đây tôi đã sử dụng quy luật dấu (có 6 dấu) theo thứ tự: không, huyền, hỏi, ngã, sắc, nặng. Ví dụ: A À Ả Ã Á Ạ Trong hàm Chuanhoa tôi đã sử dụng quy luật này để
  10. cắt dấu một ký tự có dấu rồi chuẩn hoá phần ký tự với câu lệnh: Kq = Kq & Mid(Cma1, 1 + ((vt1 - 1) \ 6) * 2, 2) đồng thời chuẩn hóa phần dấu: xd = xd & Mid(Cma1, 49 + ((4 + vt1) Mod 6) * 2, 2) theo PCWorld
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2