Thanh Dương xin chào

7 khách và 0 thành viên

Ảnh ngẫu nhiên

BannerHongAnh.swf 270.jpg Mungxuan.swf Happy_new_year.swf _NGUOI_THAY__NHAT_HUY.swf 01_TIENG_HAT_TU_TP_HO_CHI_MINH.swf Cover201115.jpg Donghosocogiay2chuden.swf Donghosocogiay2chutrang.swf Donghosocogiay12chutrang.swf Donghoso12.swf Donghoso21.swf Donghoso2.swf Donghoso1.swf Donghosocogiay1.swf Donghosocogiay.swf Donghoso.swf Clock_LienBich.swf Ad_cadao.swf Videoplayback_.flv

Tài nguyên dạy học

Điều tra ý kiến

Bạn thấy trang này như thế nào?
Đẹp
Đơn điệu
Bình thường
Ý kiến khác

Sắp xếp dữ liệu

Nhúng mã HTML

Thống kê

  • truy cập   (chi tiết)
    trong hôm nay
  • lượt xem
    trong hôm nay
  • thành viên
  • thống kê truy cập

    free counters
    Gốc > Những vấn đề về CNTT > Thủ thuật Access - Excel >

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

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

    ImageTrong 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 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ÔôƠơ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 Unicode trong MS Access'.

    ImageBướ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

    Dim CgocKdau, Cma1 As String, CgocCdau, xd, Cma2 As String

    CgocCdau = ForChuama.TextGocCdau.Text

    Cma1 = 'aaacaeaoaqaybkbmbocaccckabadafaparazblbnbpcb
    cdcl1b1c1d1e1f1a'

    CgocKdau = ForChuama.TextGockdau.Text

    Cma2 = 'aaabacadaeafagahaiajakalamanaoapaqarasatauavawaxayaz
    babbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzcacbcc
    cdcecfcgchcicjckclcmcn'

    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

    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

    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))

    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 để 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)


    Nhắn tin cho tác giả
    Đỗ Thanh Dương @ 15:36 07/09/2013
    Số lượt xem: 902
    Số lượt thích: 0 người
     
    Gửi ý kiến

    HỖ TRỢ QUẢN TRỊ WEBSITE

    Thay tên website / Chọn thư mục / Mở ra
    Giao diện Module Thư mục Thành viên Tài nguyên Xóa Code
    http://