• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

Code chuyển qua lại giữa chuỗi Telex, Vni và Unicode

Các thủ thuật liên quan đến xử lý chuỗi và thời gian
Hình đại diện của người dùng
phantronghiep07
Thành viên chính thức
Thành viên chính thức
Bài viết: 29
Ngày tham gia: T.Năm 29/04/2010 2:34 pm
Been thanked: 4 time

Code chuyển qua lại giữa chuỗi Telex, Vni và Unicode

Gửi bàigửi bởi phantronghiep07 » T.Năm 29/07/2010 8:54 am

Thủ thuật: Code ngắn gọn chuyển qua lại giữa chuỗi gõ theo kiểu Telex, Vni và chuỗi tiêng Việt Unicode
Tác giả: phantronghiep07
Mô tả: Từ trước đến nay, đã có nhiều hàm chuyển đổi qua lại giữa nhiều kiểu gõ và tiếng Việt Unicode, nhưng các hàm đó đều có code phức tạp và dài. Nay, mình xin đưa ra các hàm do mình tự viết, với 2 kiểu gõ thông dụng là Telex và Vni. Mình viết và xài lâu rồi rồi mà không thấy phát sinh lỗi nào. Yêu cầu là phải gõ dấu ngay sau nguyên âm. Riêng khi chuyển từ kiểu gõ Telex ra tiếng Việt, với các từ muốn hiển thị không có dấu (như tiếng Anh chẳng hạn), ta phải dùng dấu ‘ ở những chỗ sinh ra dấu, vd: ta gõ Telex thì thành Telẽ, còn gõ Tele’x thì thành Telex.


Về code thì rất đơn giản và dễ hiểu, các bạn xem là hiểu ngay.
Nếu dùng các hàm của mình trong các ứng dụng, các bạn cần ghi rõ tên tác giả.
Các hàm đó là:

1. Hàm chuyển chuỗi gõ theo kiểu Telex thành chuỗi tiếng Việt Unicde:

Mã: Chọn hết

Public Function GoTel2Uni(ChuoiGoTelex As String) As String ' Chuyen chuoi go theo kieu Telex thanh chuoi tieng Viet Unicode
'---------------------------------------------------------------------------------------
' Function : GoTel2Uni
' Author    : phantronghiep07
' Phone: 0915 080 282
'---------------------------------------------------------------------------------------
    Dim i As Integer
    Dim MaAcii, Telex
   
     MaAcii = Array(7845, 7847, 7849, 7851, 7853, 226, 225, 224, 7843, 227, 7841, 7855, 7857, 7859, _
                                7861, 7863, 259, 250, 249, 7911, 361, 7909, 7913, 7915, 7917, 7919, 7921, 432, _
                                7871, 7873, 7875, 7877, 7879, 234, 233, 232, 7867, 7869, 7865, 7889, 7891, 7893, _
                                7895, 7897, 244, 243, 242, 7887, 245, 7885, 7899, 7901, 7903, 7905, 7907, 417, _
                                237, 236, 7881, 297, 7883, 253, 7923, 7927, 7929, 7925, 273, 7844, 7846, 7848, _
                                7850, 7852, 194, 193, 192, 7842, 195, 7840, 7854, 7856, 7858, 7860, 7862, 258, _
                                218, 217, 7910, 360, 7908, 7912, 7914, 7916, 7918, 7920, 431, 7870, 7872, 7874, _
                                7876, 7878, 202, 201, 200, 7866, 7868, 7864, 7888, 7890, 7892, 7894, 7896, 212, _
                                211, 210, 7886, 213, 7884, 7898, 7900, 7902, 7904, 7906, 416, 205, 204, 7880, 296, _
                                7882, 221, 7922, 7926, 7928, 7924, 272)
                       
     Telex = Array("aas", "aaf", "aar", "aax", "aaj", "aa", "as", "af", "ar", "ax", "aj", "aws", "awf", _
                            "awr", "awx", "awj", "aw", "us", "uf", "ur", "ux", "uj", "uws", "uwf", "uwr", "uwx", _
                            "uwj", "uw", "ees", "eef", "eer", "eex", "eej", "ee", "es", "ef", "er", "ex", "ej", _
                            "oos", "oof", "oor", "oox", "ooj", "oo", "os", "of", "or", "ox", "oj", "ows", "owf", _
                            "owr", "owx", "owj", "ow", "is", "if", "ir", "ix", "ij", "ys", "yf", "yr", "yx", "yj", _
                            "dd", "AAS", "AAF", "AAR", "AAX", "AAJ", "AA", "AS", "AF", "AR", "AX", _
                            "AJ", "AWS", "AWF", "AWR", "AWX", "AWJ", "AW", "US", "UF", "UR", "UX", _
                            "UJ", "UWS", "UWF", "UWR", "UWX", "UWJ", "UW", "EES", "EEF", "EER", _
                            "EEX", "EEJ", "EE", "ES", "EF", "ER", "EX", "EJ", "OOS", "OOF", "OOR", _
                            "OOX", "OOJ", "OO", "OS", "OF", "OR", "OX", "OJ", "OWS", "OWF", "OWR", _
                            "OWX", "OWJ", "OW", "IS", "IF", "IR", "IX", "IJ", "YS", "YF", "YR", "YX", _
                            "YJ", "DD")
                           
    GoTel2Uni = ChuoiGoTelex
    For i = 0 To 133
        GoTel2Uni = Replace(GoTel2Uni, Telex(i), ChrW(MaAcii(i)))
    Next i
    GoTel2Uni = Replace(GoTel2Uni, "'", "") ' Neu muon hien thi ko dau thi phai go ky tu ' . Vd: Vi'sual Ba'sic
End Function


2. Hàm chuyển chuỗi gõ theo kiểu Vni thành chuỗi tiếng Việt Unicde:

Mã: Chọn hết

Public Function GoVni2Uni(ChuoiGoVni As String) As String   ' Chuyen chuoi go theo kieu Vni thanh chuoi tieng Viet Unicode
'---------------------------------------------------------------------------------------
' Function : GoVni2Uni
' Author    : phantronghiep07
' Phone: 0915 080 282
'---------------------------------------------------------------------------------------
    Dim i As Integer
    Dim MaAcii, Vni
   
     MaAcii = Array(7845, 7847, 7849, 7851, 7853, 226, 225, 224, 7843, 227, 7841, 7855, 7857, 7859, _
                                7861, 7863, 259, 250, 249, 7911, 361, 7909, 7913, 7915, 7917, 7919, 7921, 432, _
                                7871, 7873, 7875, 7877, 7879, 234, 233, 232, 7867, 7869, 7865, 7889, 7891, 7893, _
                                7895, 7897, 244, 243, 242, 7887, 245, 7885, 7899, 7901, 7903, 7905, 7907, 417, _
                                237, 236, 7881, 297, 7883, 253, 7923, 7927, 7929, 7925, 273, 7844, 7846, 7848, _
                                7850, 7852, 194, 193, 192, 7842, 195, 7840, 7854, 7856, 7858, 7860, 7862, 258, _
                                218, 217, 7910, 360, 7908, 7912, 7914, 7916, 7918, 7920, 431, 7870, 7872, 7874, _
                                7876, 7878, 202, 201, 200, 7866, 7868, 7864, 7888, 7890, 7892, 7894, 7896, 212, _
                                211, 210, 7886, 213, 7884, 7898, 7900, 7902, 7904, 7906, 416, 205, 204, 7880, 296, _
                                7882, 221, 7922, 7926, 7928, 7924, 272)
                       
     Vni = Array("a61", "a62", "a63", "a64", "a65", "a6", "a1", "a2", "a3", "a4", "a5", "a81", "a82", _
                            "a83", "a84", "a85", "a8", "u1", "u2", "u3", "u4", "u5", "u71", "u72", "u73", "u74", _
                            "u75", "u7", "e61", "e62", "e63", "e64", "e65", "e6", "e1", "e2", "e3", "e4", "e5", _
                            "o61", "o62", "o63", "o64", "o65", "o6", "o1", "o2", "o3", "o4", "o5", "o71", "o72", _
                            "o73", "o74", "o75", "o7", "i1", "i2", "i3", "i4", "i5", "y1", "y2", "y3", "y4", "y5", _
                            "d9", "A61", "A62", "A63", "A64", "A65", "A6", "A1", "A2", "A3", "A4", "A5", _
                            "A81", "A82", "A83", "A84", "A85", "A8", "U1", "U2", "U3", "U4", "U5", "U71", _
                            "U72", "U73", "U74", "U75", "U7", "E61", "E62", "E63", "E64", "E65", "E6", "E1", _
                            "E2", "E3", "E4", "E5", "O61", "O62", "O63", "O64", "O65", "O6", "O1", "O2", _
                            "O3", "O4", "O5", "O71", "O72", "O73", "O74", "O75", "O7", "I1", "I2", "I3", "I4", _
                            "I5", "Y1", "Y2", "Y3", "Y4", "Y5", "D9")
                           
    GoVni2Uni = ChuoiGoVni
    For i = 0 To 133
        GoVni2Uni = Replace(GoVni2Uni, Vni(i), ChrW(MaAcii(i)))
    Next i
End Function


3. Hàm chuyển chuỗi tiếng Việt Unicode thành chuỗi gõ theo kiểu Telex:

Mã: Chọn hết

Public Function Uni2GoTel(ChuoiUni As String) As String ' Chuyen chuoi tieng Viet Unicode thanh chuoi go theo kieu Telex
'---------------------------------------------------------------------------------------
' Function : Uni2GoTel
' Author    : phantronghiep07
' Phone: 0915 080 282
'---------------------------------------------------------------------------------------
    Dim i As Integer
    Dim MaAcii, Telex
   
     MaAcii = Array(7845, 7847, 7849, 7851, 7853, 226, 225, 224, 7843, 227, 7841, 7855, 7857, 7859, _
                                7861, 7863, 259, 250, 249, 7911, 361, 7909, 7913, 7915, 7917, 7919, 7921, 432, _
                                7871, 7873, 7875, 7877, 7879, 234, 233, 232, 7867, 7869, 7865, 7889, 7891, 7893, _
                                7895, 7897, 244, 243, 242, 7887, 245, 7885, 7899, 7901, 7903, 7905, 7907, 417, _
                                237, 236, 7881, 297, 7883, 253, 7923, 7927, 7929, 7925, 273, 7844, 7846, 7848, _
                                7850, 7852, 194, 193, 192, 7842, 195, 7840, 7854, 7856, 7858, 7860, 7862, 258, _
                                218, 217, 7910, 360, 7908, 7912, 7914, 7916, 7918, 7920, 431, 7870, 7872, 7874, _
                                7876, 7878, 202, 201, 200, 7866, 7868, 7864, 7888, 7890, 7892, 7894, 7896, 212, _
                                211, 210, 7886, 213, 7884, 7898, 7900, 7902, 7904, 7906, 416, 205, 204, 7880, 296, _
                                7882, 221, 7922, 7926, 7928, 7924, 272)
                       
     Telex = Array("aas", "aaf", "aar", "aax", "aaj", "aa", "as", "af", "ar", "ax", "aj", "aws", "awf", _
                            "awr", "awx", "awj", "aw", "us", "uf", "ur", "ux", "uj", "uws", "uwf", "uwr", "uwx", _
                            "uwj", "uw", "ees", "eef", "eer", "eex", "eej", "ee", "es", "ef", "er", "ex", "ej", _
                            "oos", "oof", "oor", "oox", "ooj", "oo", "os", "of", "or", "ox", "oj", "ows", "owf", _
                            "owr", "owx", "owj", "ow", "is", "if", "ir", "ix", "ij", "ys", "yf", "yr", "yx", "yj", _
                            "dd", "AAS", "AAF", "AAR", "AAX", "AAJ", "AA", "AS", "AF", "AR", "AX", _
                            "AJ", "AWS", "AWF", "AWR", "AWX", "AWJ", "AW", "US", "UF", "UR", "UX", _
                            "UJ", "UWS", "UWF", "UWR", "UWX", "UWJ", "UW", "EES", "EEF", "EER", _
                            "EEX", "EEJ", "EE", "ES", "EF", "ER", "EX", "EJ", "OOS", "OOF", "OOR", _
                            "OOX", "OOJ", "OO", "OS", "OF", "OR", "OX", "OJ", "OWS", "OWF", "OWR", _
                            "OWX", "OWJ", "OW", "IS", "IF", "IR", "IX", "IJ", "YS", "YF", "YR", "YX", _
                            "YJ", "DD")
                           
    Uni2GoTel = ChuoiUni
    For i = 0 To 133
        Uni2GoTel = Replace(Uni2GoTel, ChrW(MaAcii(i)), Telex(i))
    Next i

End Function


4. Hàm chuyển chuỗi tiếng Việt Unicode thành chuỗi gõ theo kiểu Vni:

Mã: Chọn hết

Public Function Uni2GoVni(ChuoiUni As String) As String ' Chuyen chuoi tieng Viet Unicode thanh chuoi go theo kieu Vni
'---------------------------------------------------------------------------------------
' Function : Uni2GoVni
' Author    : phantronghiep07
' Phone: 0915 080 282
'---------------------------------------------------------------------------------------
    Dim i As Integer
    Dim MaAcii, Vni
   
     MaAcii = Array(7845, 7847, 7849, 7851, 7853, 226, 225, 224, 7843, 227, 7841, 7855, 7857, 7859, _
                                7861, 7863, 259, 250, 249, 7911, 361, 7909, 7913, 7915, 7917, 7919, 7921, 432, _
                                7871, 7873, 7875, 7877, 7879, 234, 233, 232, 7867, 7869, 7865, 7889, 7891, 7893, _
                                7895, 7897, 244, 243, 242, 7887, 245, 7885, 7899, 7901, 7903, 7905, 7907, 417, _
                                237, 236, 7881, 297, 7883, 253, 7923, 7927, 7929, 7925, 273, 7844, 7846, 7848, _
                                7850, 7852, 194, 193, 192, 7842, 195, 7840, 7854, 7856, 7858, 7860, 7862, 258, _
                                218, 217, 7910, 360, 7908, 7912, 7914, 7916, 7918, 7920, 431, 7870, 7872, 7874, _
                                7876, 7878, 202, 201, 200, 7866, 7868, 7864, 7888, 7890, 7892, 7894, 7896, 212, _
                                211, 210, 7886, 213, 7884, 7898, 7900, 7902, 7904, 7906, 416, 205, 204, 7880, 296, _
                                7882, 221, 7922, 7926, 7928, 7924, 272)
                       
     Vni = Array("a61", "a62", "a63", "a64", "a65", "a6", "a1", "a2", "a3", "a4", "a5", "a81", "a82", _
                            "a83", "a84", "a85", "a8", "u1", "u2", "u3", "u4", "u5", "u71", "u72", "u73", "u74", _
                            "u75", "u7", "e61", "e62", "e63", "e64", "e65", "e6", "e1", "e2", "e3", "e4", "e5", _
                            "o61", "o62", "o63", "o64", "o65", "o6", "o1", "o2", "o3", "o4", "o5", "o71", "o72", _
                            "o73", "o74", "o75", "o7", "i1", "i2", "i3", "i4", "i5", "y1", "y2", "y3", "y4", "y5", _
                            "d9", "A61", "A62", "A63", "A64", "A65", "A6", "A1", "A2", "A3", "A4", "A5", _
                            "A81", "A82", "A83", "A84", "A85", "A8", "U1", "U2", "U3", "U4", "U5", "U71", _
                            "U72", "U73", "U74", "U75", "U7", "E61", "E62", "E63", "E64", "E65", "E6", "E1", _
                            "E2", "E3", "E4", "E5", "O61", "O62", "O63", "O64", "O65", "O6", "O1", "O2", _
                            "O3", "O4", "O5", "O71", "O72", "O73", "O74", "O75", "O7", "I1", "I2", "I3", "I4", _
                            "I5", "Y1", "Y2", "Y3", "Y4", "Y5", "D9")
                           
    Uni2GoVni = ChuoiUni
    For i = 0 To 133
        Uni2GoVni = Replace(Uni2GoVni, ChrW(MaAcii(i)), Vni(i))
    Next i
End Function


Mình còn 1 thủ tục để việc Việt hóa Menu trở lên vô cùng đơn giản. Mình sẽ sớm đăng lên.
Tập tin đính kèm
Telex, Vni - Unicode.rar
(3.37 KiB) Đã tải 667 lần


Chí nhỏ vui với việc nhỏ !
Giấc mơ con ru ngủ cuộc đời con !

baohiep
Thành viên danh dự
Thành viên danh dự
Bài viết: 109
Ngày tham gia: CN 27/12/2009 6:37 pm
Đến từ: Tam Kỳ
Has thanked: 3 time
Been thanked: 9 time

Re: Code chuyển qua lại giữa chuỗi Telex, Vni và Unicode

Gửi bàigửi bởi baohiep » T.Ba 15/03/2011 8:36 pm

Bạn nói sớm đăng lên sao không lên.

Hình đại diện của người dùng
phantronghiep07
Thành viên chính thức
Thành viên chính thức
Bài viết: 29
Ngày tham gia: T.Năm 29/04/2010 2:34 pm
Been thanked: 4 time

Re: Code chuyển qua lại giữa chuỗi Telex, Vni và Unicode

Gửi bàigửi bởi phantronghiep07 » T.Tư 16/03/2011 9:16 am

BÀi viết "Việt hóa menu dễ như trở bàn tay" mình đã đăng lâu rồi đó.

uppicsthao
Bài viết: 2
Ngày tham gia: T.Năm 20/10/2011 2:37 pm

Re: Code chuyển qua lại giữa chuỗi Telex, Vni và Unicode

Gửi bàigửi bởi uppicsthao » T.Năm 20/10/2011 3:05 pm

Bạn ơi xuất qua foxpro từ access dùng docmd.transferdatabase font vni bị sai dấu. Bạn có cách nào giúp mình đi. Cám ơn nhiều. Cái hàm uni qua VNI chạy nhưng ko hiển thị trong foxpro.

Hình đại diện của người dùng
tuyen_dt18
Guru
Guru
Bài viết: 256
Ngày tham gia: T.Bảy 19/04/2008 8:46 pm
Đến từ: Hưng Yên
Been thanked: 43 time
Liên hệ:

Re: Code chuyển qua lại giữa chuỗi Telex, Vni và Unicode

Gửi bàigửi bởi tuyen_dt18 » T.Sáu 21/10/2011 1:24 am

Hỏi ý kiến tác giả trước khi sử dụng hoặc trích dẫn rõ nguồn bài viết khi sử dụng.


Quay về “[VB] Chuỗi và Thời gian”

Đang trực tuyến

Đang xem chuyên mục này: Không có thành viên nào trực tuyến.1 khách