• Thứ Tư, 18/04/2007 09:23 (GMT+7)

    Code chuyển từ font TCVN3 sang tiếng Việt không dấu.

    Câu hỏi :
    Xin hỏi code chuyển từ font TCVN3 sang tiếng Việt không dấu. 
     

    Trả lời :

    Việc chuyển chuỗi có dấu từ bảng mã TCVN3 về chuỗi không dấu là trường hợp đặc biệt của hoạt động chuyển mã. Có nhiều phương pháp giải quyết khác nhau, trong đó phương pháp dùng bảng tra là đơn giản và dễ hiện thực hơn cả. Ý tưởng của phương pháp này là xây dựng 1 bảng tra có n (=256) phần tử, mỗi phần tử chứa mã ký tự không dấu tương ứng với ký tự có dấu của bảng mã TCVN3. Đoạn code VB hiện thực ý tưởng trên như sau:

     'định nghĩa bảng tra từng ký tự TCVN3 ra ký tự không dấu tương ứng
     Dim Khongdau(0 To 255) As Byte
     
     'thủ tục khởi động nội dung của bảng Khongdau
     'phải gọi thủ tục này 1 lần trước khi dùng hàm Xoadau dưới đây
     Sub InitKhongdau()
     'lúc đầu tất cả ký tự giống nhau
     For i = 0 To 255
     Khongdau(i) = i
     Next i
     'hiệu chỉnh các vị trí miêu tả ký tự có dấu
     Khongdau(&HA1) = AscB("A")
     Khongdau(&HA2) = AscB("A")
     Khongdau(&HA3) = AscB("E")
     Khongdau(&HA4) = AscB("O")
     Khongdau(&HA5) = AscB("O")
     Khongdau(&HA6) = AscB("U")
     Khongdau(&HA7) = AscB("D")
     Khongdau(&HA8) = AscB("a")
     Khongdau(&HA9) = AscB("a")
     Khongdau(&HAA) = AscB("e")
     Khongdau(&HAB) = AscB("o")
     Khongdau(&HAC) = AscB("o")
     Khongdau(&HAD) = AscB("u")
     Khongdau(&HAE) = AscB("d")
     'hiệu chỉnh các vị trí miêu tả ký tự a có dấu
     For i = &HB5 To &HCC
     Khongdau(i) = AscB("a")
     Next i
     'hiệu chỉnh các vị trí miêu tả ký tự e có dấu
     For i = &HCC To &HD6
     Khongdau(i) = AscB("e")
     Next i
     'hiệu chỉnh các vị trí miêu tả ký tự i có dấu
     For i = &HD7 To &HDE
     Khongdau(i) = AscB("i")
     Next i
     'hiệu chỉnh các vị trí miêu tả ký tự o có dấu
     For i = &HE1 To &HEE
     Khongdau(i) = AscB("o")
     Next i
     'hiệu chỉnh các vị trí miêu tả ký tự u có dấu
     For i = &HEF To &HF9
     Khongdau(i) = AscB("u")
     Next i
     'hiệu chỉnh các vị trí miêu tả ký tự y có dấu
     For i = &HFA To &HFF
     Khongdau(i) = AscB("y")
     Next i
     End Sub
     
     'hàm Xoadau sẽ xóa dấu của chuỗi nhập
     Private Function Xoadau(s As String) As String
     Dim buf() As Byte
     Dim slen As Integer
     slen = 0
     'chuyển chuỗi s về dạng ANSI
     buf = StrConv(s, vbFromUnicode)
     'xóa dấu từng ký tự của chuỗi
     For i = 0 To Len(s) - 1
     buf(i) = Khongdau(buf(i))
     Next i
     'chuyển kết quả về dạng Unicode của VB
     Xoadau = StrConv(buf, vbUnicode)
     End Function
     
     'Thủ tục thử xóa dấu chuỗi người dùng nhập vào
     Private Sub Command1_Click()
     'khởi động bảng chuyển
     InitKhongdau
     'thử xóa dấu chuỗi nhập ở Textbox
     MsgBox Xoadau(Text1.Text)
     End Sub

    Lưu ý rằng thủ tục InitKhong dau() phải được gọi 1 lần để khởi động giá trị đúng cho bảng Khongdau, sau đó bạn có quyền gọi hàm Xoadau() bất kỳ lúc nào với số lần bất kỳ.

     

    Chuyên mục: Lập trình