Xin code chuyển mã kiểu gõ telex! (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

dazkangel

<New Horizons>
Tham gia
28/2/17
Bài viết
2,880
Được thích
4,039
Giới tính
Nam
Chào các bác, em muốn đổi các chữ kiểu telex giống như sau: "DDaf Nawxng" thành "Đà Nẵng"
Các bác giải giúp em ạ, xin cảm ơn mọi người.
 

File đính kèm

Chào các bác, em muốn đổi các chữ kiểu telex giống như sau: "DDaf Nawxng" thành "Đà Nẵng"
Các bác giải giúp em ạ, xin cảm ơn mọi người.
Để gõ được chữ "Đ" theo kiểu Telex có những cách sau:
Dd
DD
D {một nguyên âm bất kỳ} d


Với chữ "à" gõ theo kiểu Telex có những cách sau:
af
a {một hoặc nhiều hơn một hoặc toàn bộ các ký tự (srxjz)} f

 
Upvote 0
Để gõ được chữ "Đ" theo kiểu Telex có những cách sau:
Dd
DD
D {một nguyên âm bất kỳ} d


Với chữ "à" gõ theo kiểu Telex có những cách sau:
af
a {một hoặc nhiều hơn một hoặc toàn bộ các ký tự (srxjz)} f
Bác có cách nào không ạ, xài code thôi chứ không mong hàm gì cả :D
 
Upvote 0
Để gõ được chữ "Đ" theo kiểu Telex có những cách sau:
Dd
DD
D {một nguyên âm bất kỳ} d


Với chữ "à" gõ theo kiểu Telex có những cách sau:
af
a {một hoặc nhiều hơn một hoặc toàn bộ các ký tự (srxjz)} f
Cái thứ 2 chắc khó ăn thôi chơi kiểu 1 được rồi :P
 
Upvote 0
Chào các bác, em muốn đổi các chữ kiểu telex giống như sau: "DDaf Nawxng" thành "Đà Nẵng"
Các bác giải giúp em ạ, xin cảm ơn mọi người.
Như kiểu gõ này:
Mã:
Buwowsc towsi ddefo ngang bosng xees taf
còn ráng chuyển đổi được, chứ còn kiểu này:
Mã:
Buowstowsiddefongangbosngxeestaf
Dính 1 chùm vậy thì.. thua
 
Upvote 0
Như kiểu gõ này:
Mã:
Buwowsc towsi ddefo ngang bosng xees taf
còn ráng chuyển đổi được, chứ còn kiểu này:
Mã:
Buowstowsiddefongangbosngxeestaf
Dính 1 chùm vậy thì.. thua
cảm ơn bác quan tâm ạ, cái dính trùm thì chịu ạ, khó quá thì mình tìm giải pháp đơn giản hơn ^^
 
Upvote 0
Chào các bác, em muốn đổi các chữ kiểu telex giống như sau: "DDaf Nawxng" thành "Đà Nẵng"
Các bác giải giúp em ạ, xin cảm ơn mọi người.
nếu bạn muốn dùng theo cách gõ của "ANH" ndu nói thì tham khảo cái này (theo mong ước của ẢNH- được trẻ hóa) :v
Mã:
Option Explicit
Const sChrW = "7855-7857-7859-7861-7863-7845-7847-7849-7851-7853-7871-7873-7875-7877-7879-7889-7891-7893-7895-7897-7899-7901-7903-7905-7907-7913-7915-7917-7919-7921-7854-7856-7858-7860-7862-7844-7846-7848-7850-7852-7870-7872-7874-7876-7878-7888-7890-7892-7894-7896-7898-7900-7902-7904-7906-7912-7914-7916-7918-7920-225-224-7843-227-7841-259-226-273-233-232-7867-7869-7865-234-237-236-7881-297-7883-243-242-7887-245-7885-244-417-250-249-7911-361-7909-432-253-7923-7927-7929-7925-193-192-7842-195-7840-258-194-272-201-200-7866-7868-7864-202-205-204-7880-296-7882-211-210-7886-213-7884-212-416-218-217-7910-360-7908-431-221-7922-7926-7928-7924-10"
Const sTelex = "aws-awf-awr-awx-awj-aas-aaf-aar-aax-aaj-ees-eef-eer-eex-eej-oos-oof-oor-oox-ooj-ows-owf-owr-owx-owj-uws-uwf-uwr-uwx-uwj-AWS-AWF-AWR-AWX-AWJ-AAS-AAF-AAR-AAX-AAJ-EES-EEF-EER-EEX-EEJ-OOS-OOF-OOR-OOX-OOJ-OWS-OWF-OWR-OWX-OWJ-UWS-UWF-UWR-UWX-UWJ-as-af-ar-ax-aj-aw-aa-dd-es-ef-er-ex-ej-ee-is-if-ir-ix-ij-os-of-or-ox-oj-oo-ow-us-uf-ur-ux-uj-uw-ys-yf-yr-yx-yj-AS-AF-AR-AX-AJ-AW-AA-DD-ES-EF-ER-EX-EJ-EE-IS-IF-IR-IX-IJ-OS-OF-OR-OX-OJ-OO-OW-US-UF-UR-UX-UJ-UW-YS-YF-YR-YX-YJ- vbE "
Const sVni = "a81-a82-a83-a84-a85-a61-a62-a63-a64-a65-e61-e62-e63-e64-e65-o61-o62-o63-o64-o65-o71-o72-o73-o74-o75-u71-u72-u73-u74-u75-A81-A82-A83-A84-A85-A61-A62-A63-A64-A65-E61-E62-E63-E64-E65-O61-O62-O63-O64-O65-O71-O72-O73-O74-O75-U71-U72-U73-U74-U75-a1-a2-a3-a4-a5-a8-a6-d9-e1-e2-e3-e4-e5-e6-i1-i2-i3-i4-i5-o1-o2-o3-o4-o5-o6-o7-u1-u2-u3-u4-u5-u7-y1-y2-y3-y4-y5-A1-A2-A3-A4-A5-A7-A6-D9-E1-E2-E3-E4-E5-E6-I1-I2-I3-I4-I5-O1-O2-O3-O4-O5-O6-O7-U1-U2-U3-U4-U5-U7-Y1-Y2-Y3-Y4-Y5- vbE "
Const sXoaDau = "a-a-a-a-a-a-a-a-a-a-e-e-e-e-e-o-o-o-o-o-o-o-o-o-o-u-u-u-u-u-A-A-A-A-A-A-A-A-A-A-E-E-E-E-E-O-O-O-O-O-O-O-O-O-O-U-U-U-U-U-a-a-a-a-a-a-a-d-e-e-e-e-e-e-i-i-i-i-i-o-o-o-o-o-o-o-u-u-u-u-u-u-y-y-y-y-y-A-A-A-A-A-A-A-D-E-E-E-E-E-E-I-I-I-I-I-O-O-O-O-O-O-O-U-U-U-U-U-U-Y-Y-Y-Y-Y-"
Function UT(ByVal mTex As String, Optional Bo As Byte = 1) As String 'chuyen kieu go unicode thanh kieu go telex
Dim i As Long
    Nguon = Split(sChrW, "-"):  KetQua = Split(sTelex, "-")
    For i = LBound(Nguon, 1) To UBound(Nguon, 1) - Bo
        mTex = Replace(mTex, ChrW$(Nguon(i)), KetQua(i))
    Next i
    UT = mTex
End Function
Function TU(ByVal mTex As String, Optional Bo As Byte = 1) As String'chuyen kieu go telex thanh unicode
Dim i As Long
    Nguon = Split(sTelex, "-"): KetQua = Split(sChrW, "-")
    For i = LBound(Nguon, 1) To UBound(Nguon, 1) - Bo
        mTex = Replace(mTex, Nguon(i), ChrW$(KetQua(i)))
    Next i
    TU = mTex
End Function
Function UV(ByVal mTex As String, Optional Bo As Byte = 1) As String'chuyen kieu go unicode thanh kieu go vni
Dim i As Long
    Nguon = Split(sChrW, "-"):  KetQua = Split(sVni, "-")
    For i = LBound(Nguon, 1) To UBound(Nguon, 1) - Bo
        mTex = Replace(mTex, ChrW$(Nguon(i)), KetQua(i))
    Next i
    UV = mTex
End Function
Function VU(ByVal mTex As String, Optional Bo As Byte = 1) As String'chuyen kieu go vni thanh unicode
Dim i As Long
    Nguon = Split(sVni, "-"):   KetQua = Split(sChrW, "-")
    For i = LBound(Nguon, 1) To UBound(Nguon, 1) - Bo
        mTex = Replace(mTex, Nguon(i), ChrW$(KetQua(i)))
    Next i
    VU = mTex
End Function
Function mTV(ByVal mTex As String, Optional Bo As Byte = 1) As String'xoa dau tieng viet
Dim i As Long
    Nguon = Split(sChrW, "-"):  KetQua = Split(sXoaDau, "-")
    For i = LBound(Nguon, 1) To UBound(Nguon, 1) - Bo
        mTex = Replace(mTex, ChrW$(Nguon(i)), KetQua(i))
    Next i
    mTV = mTex
End Function
=UT("Thí nghiệm") => This nghieejm
=TU("This nghieejm") => Thí nghiệm
=UV("Thí nghiệm") => Thi1 nghie65m
=VU("Thi1 nghie65m") => Thí nghiệm
=mTV("Thí nghiệm") => Thi nghiem
code không áp dụng cho tiếng anh nha bạn. This thì nó sẽ thành Thí chứ không thông minh đến nỗi nhận biết nó là tiếng anh mà giữ lại nguyên mẫu đâu, khuyến khích chuyển thành kiểu VNI thì hay hơn
 
Lần chỉnh sửa cuối:
Upvote 0
nếu bạn muốn dùng theo cách gõ của "ANH" ndu nói thì tham khảo cái này (theo mong ước của ẢNH- được trẻ hóa) :v
Mã:
Option Explicit
Const sChrW = "7855-7857-7859-7861-7863-7845-7847-7849-7851-7853-7871-7873-7875-7877-7879-7889-7891-7893-7895-7897-7899-7901-7903-7905-7907-7913-7915-7917-7919-7921-7854-7856-7858-7860-7862-7844-7846-7848-7850-7852-7870-7872-7874-7876-7878-7888-7890-7892-7894-7896-7898-7900-7902-7904-7906-7912-7914-7916-7918-7920-225-224-7843-227-7841-259-226-273-233-232-7867-7869-7865-234-237-236-7881-297-7883-243-242-7887-245-7885-244-417-250-249-7911-361-7909-432-253-7923-7927-7929-7925-193-192-7842-195-7840-258-194-272-201-200-7866-7868-7864-202-205-204-7880-296-7882-211-210-7886-213-7884-212-416-218-217-7910-360-7908-431-221-7922-7926-7928-7924-10"
Const sTelex = "aws-awf-awr-awx-awj-aas-aaf-aar-aax-aaj-ees-eef-eer-eex-eej-oos-oof-oor-oox-ooj-ows-owf-owr-owx-owj-uws-uwf-uwr-uwx-uwj-AWS-AWF-AWR-AWX-AWJ-AAS-AAF-AAR-AAX-AAJ-EES-EEF-EER-EEX-EEJ-OOS-OOF-OOR-OOX-OOJ-OWS-OWF-OWR-OWX-OWJ-UWS-UWF-UWR-UWX-UWJ-as-af-ar-ax-aj-aw-aa-dd-es-ef-er-ex-ej-ee-is-if-ir-ix-ij-os-of-or-ox-oj-oo-ow-us-uf-ur-ux-uj-uw-ys-yf-yr-yx-yj-AS-AF-AR-AX-AJ-AW-AA-DD-ES-EF-ER-EX-EJ-EE-IS-IF-IR-IX-IJ-OS-OF-OR-OX-OJ-OO-OW-US-UF-UR-UX-UJ-UW-YS-YF-YR-YX-YJ- vbE "
Const sVni = "a81-a82-a83-a84-a85-a61-a62-a63-a64-a65-e61-e62-e63-e64-e65-o61-o62-o63-o64-o65-o71-o72-o73-o74-o75-u71-u72-u73-u74-u75-A81-A82-A83-A84-A85-A61-A62-A63-A64-A65-E61-E62-E63-E64-E65-O61-O62-O63-O64-O65-O71-O72-O73-O74-O75-U71-U72-U73-U74-U75-a1-a2-a3-a4-a5-a8-a6-d9-e1-e2-e3-e4-e5-e6-i1-i2-i3-i4-i5-o1-o2-o3-o4-o5-o6-o7-u1-u2-u3-u4-u5-u7-y1-y2-y3-y4-y5-A1-A2-A3-A4-A5-A7-A6-D9-E1-E2-E3-E4-E5-E6-I1-I2-I3-I4-I5-O1-O2-O3-O4-O5-O6-O7-U1-U2-U3-U4-U5-U7-Y1-Y2-Y3-Y4-Y5- vbE "
Const sXoaDau = "a-a-a-a-a-a-a-a-a-a-e-e-e-e-e-o-o-o-o-o-o-o-o-o-o-u-u-u-u-u-A-A-A-A-A-A-A-A-A-A-E-E-E-E-E-O-O-O-O-O-O-O-O-O-O-U-U-U-U-U-a-a-a-a-a-a-a-d-e-e-e-e-e-e-i-i-i-i-i-o-o-o-o-o-o-o-u-u-u-u-u-u-y-y-y-y-y-A-A-A-A-A-A-A-D-E-E-E-E-E-E-I-I-I-I-I-O-O-O-O-O-O-O-U-U-U-U-U-U-Y-Y-Y-Y-Y-"
Function UT(ByVal mTex As String, Optional Bo As Byte = 1) As String 'chuyen kieu go unicode thanh kieu go telex
Dim i As Long
    Nguon = Split(sChrW, "-"):  KetQua = Split(sTelex, "-")
    For i = LBound(Nguon, 1) To UBound(Nguon, 1) - Bo
        mTex = Replace(mTex, ChrW$(Nguon(i)), KetQua(i))
    Next i
    UT = mTex
End Function
Function TU(ByVal mTex As String, Optional Bo As Byte = 1) As String'chuyen kieu go telex thanh unicode
Dim i As Long
    Nguon = Split(sTelex, "-"): KetQua = Split(sChrW, "-")
    For i = LBound(Nguon, 1) To UBound(Nguon, 1) - Bo
        mTex = Replace(mTex, Nguon(i), ChrW$(KetQua(i)))
    Next i
    TU = mTex
End Function
Function UV(ByVal mTex As String, Optional Bo As Byte = 1) As String'chuyen kieu go unicode thanh kieu go vni
Dim i As Long
    Nguon = Split(sChrW, "-"):  KetQua = Split(sVni, "-")
    For i = LBound(Nguon, 1) To UBound(Nguon, 1) - Bo
        mTex = Replace(mTex, ChrW$(Nguon(i)), KetQua(i))
    Next i
    UV = mTex
End Function
Function VU(ByVal mTex As String, Optional Bo As Byte = 1) As String'chuyen kieu go vni thanh unicode
Dim i As Long
    Nguon = Split(sVni, "-"):   KetQua = Split(sChrW, "-")
    For i = LBound(Nguon, 1) To UBound(Nguon, 1) - Bo
        mTex = Replace(mTex, Nguon(i), ChrW$(KetQua(i)))
    Next i
    VU = mTex
End Function
Function mTV(ByVal mTex As String, Optional Bo As Byte = 1) As String'xoa dau tieng viet
Dim i As Long
    Nguon = Split(sChrW, "-"):  KetQua = Split(sXoaDau, "-")
    For i = LBound(Nguon, 1) To UBound(Nguon, 1) - Bo
        mTex = Replace(mTex, ChrW$(Nguon(i)), KetQua(i))
    Next i
    mTV = mTex
End Function
=UT("Thí nghiệm") => This nghieejm
=TU("This nghieejm") => Thí nghiệm
=UV("Thí nghiệm") => Thi1 nghie65m
=VU("Thi1 nghie65m") => Thí nghiệm
=mTV("Thí nghiệm") => Thi nghiem
code không áp dụng cho tiếng anh nha bạn. This thì nó sẽ thành Thí chứ không thông minh đến nỗi nhận biết nó là tiếng anh mà giữ lại nguyên mẫu đâu, khuyến khích chuyển thành kiểu VNI thì hay hơn
dạ cảm ơn bác nhiều lắm ạ !
 
Upvote 0
nếu bạn muốn dùng theo cách gõ của "ANH" ndu nói thì tham khảo cái này (theo mong ước của ẢNH- được trẻ hóa) :v
Mã:
Option Explicit
Const sChrW = "7855-7857-7859-7861-7863-7845-7847-7849-7851-7853-7871-7873-7875-7877-7879-7889-7891-7893-7895-7897-7899-7901-7903-7905-7907-7913-7915-7917-7919-7921-7854-7856-7858-7860-7862-7844-7846-7848-7850-7852-7870-7872-7874-7876-7878-7888-7890-7892-7894-7896-7898-7900-7902-7904-7906-7912-7914-7916-7918-7920-225-224-7843-227-7841-259-226-273-233-232-7867-7869-7865-234-237-236-7881-297-7883-243-242-7887-245-7885-244-417-250-249-7911-361-7909-432-253-7923-7927-7929-7925-193-192-7842-195-7840-258-194-272-201-200-7866-7868-7864-202-205-204-7880-296-7882-211-210-7886-213-7884-212-416-218-217-7910-360-7908-431-221-7922-7926-7928-7924-10"
Const sTelex = "aws-awf-awr-awx-awj-aas-aaf-aar-aax-aaj-ees-eef-eer-eex-eej-oos-oof-oor-oox-ooj-ows-owf-owr-owx-owj-uws-uwf-uwr-uwx-uwj-AWS-AWF-AWR-AWX-AWJ-AAS-AAF-AAR-AAX-AAJ-EES-EEF-EER-EEX-EEJ-OOS-OOF-OOR-OOX-OOJ-OWS-OWF-OWR-OWX-OWJ-UWS-UWF-UWR-UWX-UWJ-as-af-ar-ax-aj-aw-aa-dd-es-ef-er-ex-ej-ee-is-if-ir-ix-ij-os-of-or-ox-oj-oo-ow-us-uf-ur-ux-uj-uw-ys-yf-yr-yx-yj-AS-AF-AR-AX-AJ-AW-AA-DD-ES-EF-ER-EX-EJ-EE-IS-IF-IR-IX-IJ-OS-OF-OR-OX-OJ-OO-OW-US-UF-UR-UX-UJ-UW-YS-YF-YR-YX-YJ- vbE "
Const sVni = "a81-a82-a83-a84-a85-a61-a62-a63-a64-a65-e61-e62-e63-e64-e65-o61-o62-o63-o64-o65-o71-o72-o73-o74-o75-u71-u72-u73-u74-u75-A81-A82-A83-A84-A85-A61-A62-A63-A64-A65-E61-E62-E63-E64-E65-O61-O62-O63-O64-O65-O71-O72-O73-O74-O75-U71-U72-U73-U74-U75-a1-a2-a3-a4-a5-a8-a6-d9-e1-e2-e3-e4-e5-e6-i1-i2-i3-i4-i5-o1-o2-o3-o4-o5-o6-o7-u1-u2-u3-u4-u5-u7-y1-y2-y3-y4-y5-A1-A2-A3-A4-A5-A7-A6-D9-E1-E2-E3-E4-E5-E6-I1-I2-I3-I4-I5-O1-O2-O3-O4-O5-O6-O7-U1-U2-U3-U4-U5-U7-Y1-Y2-Y3-Y4-Y5- vbE "
Const sXoaDau = "a-a-a-a-a-a-a-a-a-a-e-e-e-e-e-o-o-o-o-o-o-o-o-o-o-u-u-u-u-u-A-A-A-A-A-A-A-A-A-A-E-E-E-E-E-O-O-O-O-O-O-O-O-O-O-U-U-U-U-U-a-a-a-a-a-a-a-d-e-e-e-e-e-e-i-i-i-i-i-o-o-o-o-o-o-o-u-u-u-u-u-u-y-y-y-y-y-A-A-A-A-A-A-A-D-E-E-E-E-E-E-I-I-I-I-I-O-O-O-O-O-O-O-U-U-U-U-U-U-Y-Y-Y-Y-Y-"
Function UT(ByVal mTex As String, Optional Bo As Byte = 1) As String 'chuyen kieu go unicode thanh kieu go telex
Dim i As Long
    Nguon = Split(sChrW, "-"):  KetQua = Split(sTelex, "-")
    For i = LBound(Nguon, 1) To UBound(Nguon, 1) - Bo
        mTex = Replace(mTex, ChrW$(Nguon(i)), KetQua(i))
    Next i
    UT = mTex
End Function
Function TU(ByVal mTex As String, Optional Bo As Byte = 1) As String'chuyen kieu go telex thanh unicode
Dim i As Long
    Nguon = Split(sTelex, "-"): KetQua = Split(sChrW, "-")
    For i = LBound(Nguon, 1) To UBound(Nguon, 1) - Bo
        mTex = Replace(mTex, Nguon(i), ChrW$(KetQua(i)))
    Next i
    TU = mTex
End Function
Function UV(ByVal mTex As String, Optional Bo As Byte = 1) As String'chuyen kieu go unicode thanh kieu go vni
Dim i As Long
    Nguon = Split(sChrW, "-"):  KetQua = Split(sVni, "-")
    For i = LBound(Nguon, 1) To UBound(Nguon, 1) - Bo
        mTex = Replace(mTex, ChrW$(Nguon(i)), KetQua(i))
    Next i
    UV = mTex
End Function
Function VU(ByVal mTex As String, Optional Bo As Byte = 1) As String'chuyen kieu go vni thanh unicode
Dim i As Long
    Nguon = Split(sVni, "-"):   KetQua = Split(sChrW, "-")
    For i = LBound(Nguon, 1) To UBound(Nguon, 1) - Bo
        mTex = Replace(mTex, Nguon(i), ChrW$(KetQua(i)))
    Next i
    VU = mTex
End Function
Function mTV(ByVal mTex As String, Optional Bo As Byte = 1) As String'xoa dau tieng viet
Dim i As Long
    Nguon = Split(sChrW, "-"):  KetQua = Split(sXoaDau, "-")
    For i = LBound(Nguon, 1) To UBound(Nguon, 1) - Bo
        mTex = Replace(mTex, ChrW$(Nguon(i)), KetQua(i))
    Next i
    mTV = mTex
End Function
=UT("Thí nghiệm") => This nghieejm
=TU("This nghieejm") => Thí nghiệm
=UV("Thí nghiệm") => Thi1 nghie65m
=VU("Thi1 nghie65m") => Thí nghiệm
=mTV("Thí nghiệm") => Thi nghiem
code không áp dụng cho tiếng anh nha bạn. This thì nó sẽ thành Thí chứ không thông minh đến nỗi nhận biết nó là tiếng anh mà giữ lại nguyên mẫu đâu, khuyến khích chuyển thành kiểu VNI thì hay hơn
Em không rành về VBA lắm, em thử trong file nó báo lỗi không chạy được anh à.
Anh thử trong file gửi em xem được không.
 
Upvote 0
Để làm bài này, bạn cần phân tích ra nhiều công việc.

Công việc thứ nhất là viết một hàm đọc từ. Hàm này phải đọc được thế nào là 1 từ. Regex có thể làm chuyện này dễ dàng.

Công việc thứ hai là nhận định từ có phải là telex. Ví dụ loo, đổi sang tiếng Việt là lô; nhưng làm sao bạn biết được nó khong phải là tiếng Anh, vì từ này tiếng anh có nghĩa là cái toa lét.

Ví dụ bạn chấp nhận rằng "đổi nhầm ráng chịu" thì ta có thể bắt đầu công việc thứ ba:
Tiếng Việt có luật đặc biệt rằng một từ không bao giờ có 2 nguyên âm giống nhau (trừ trường hợp oo ở trên)
Như vậy việc đầu tiên của bạn là duyệt từng ký tự của từ, hễ có 2 a thì nó là â, 2 e thì là ê, 2 o thì là ô, nhưng có 3 a thì lại coi đó là tiếng Anh. Nếu gặp xoong thì ráng chịu. Bạn phải tự đặt luật rằng xoong, xonog thì đổi thành xông và xooong thì đổi thành xoong.
Kế đó là xét các ký tự nằm không đúng chỗ.; tiếng Việt có một số phụ âm bắt buộc phải ở đầu từ.
1. d phải ở đầu từ, nếu nó nằm ở vị trí khác thì chỉ có thể dùng để biến cái d ở đầu từ.
2. s cũng phải ở đầu từ, nếu nó nằm ở vị tri khác thì nó là dấu sắc.
3. ...

Ở công việc thứ ba này, bạn phải lập ra một bảng quy luật đầy đủ rồi từ đó mới có thể dùng bảng quy luật để lập giải thuật và viết code
 
Upvote 0
Để làm bài này, bạn cần phân tích ra nhiều công việc.

Công việc thứ nhất là viết một hàm đọc từ. Hàm này phải đọc được thế nào là 1 từ. Regex có thể làm chuyện này dễ dàng.

Công việc thứ hai là nhận định từ có phải là telex. Ví dụ loo, đổi sang tiếng Việt là lô; nhưng làm sao bạn biết được nó khong phải là tiếng Anh, vì từ này tiếng anh có nghĩa là cái toa lét.

Ví dụ bạn chấp nhận rằng "đổi nhầm ráng chịu" thì ta có thể bắt đầu công việc thứ ba:
Tiếng Việt có luật đặc biệt rằng một từ không bao giờ có 2 nguyên âm giống nhau (trừ trường hợp oo ở trên)
Như vậy việc đầu tiên của bạn là duyệt từng ký tự của từ, hễ có 2 a thì nó là â, 2 e thì là ê, 2 o thì là ô, nhưng có 3 a thì lại coi đó là tiếng Anh. Nếu gặp xoong thì ráng chịu. Bạn phải tự đặt luật rằng xoong, xonog thì đổi thành xông và xooong thì đổi thành xoong.
Kế đó là xét các ký tự nằm không đúng chỗ.; tiếng Việt có một số phụ âm bắt buộc phải ở đầu từ.
1. d phải ở đầu từ, nếu nó nằm ở vị trí khác thì chỉ có thể dùng để biến cái d ở đầu từ.
2. s cũng phải ở đầu từ, nếu nó nằm ở vị tri khác thì nó là dấu sắc.
3. ...

Ở công việc thứ ba này, bạn phải lập ra một bảng quy luật đầy đủ rồi từ đó mới có thể dùng bảng quy luật để lập giải thuật và viết code
dạ cố định kiểu anh ơi, ví dụ : buowsc là mũ ơ trước rồi mới đến dấu sắc
 
Upvote 0

File đính kèm

Upvote 0
nếu bạn muốn dùng theo cách gõ của "ANH" ndu nói thì tham khảo cái này (theo mong ước của ẢNH- được trẻ hóa) :v
Mã:
Option Explicit
Const sChrW = "7855-7857-7859-7861-7863-7845-7847-7849-7851-7853-7871-7873-7875-7877-7879-7889-7891-7893-7895-7897-7899-7901-7903-7905-7907-7913-7915-7917-7919-7921-7854-7856-7858-7860-7862-7844-7846-7848-7850-7852-7870-7872-7874-7876-7878-7888-7890-7892-7894-7896-7898-7900-7902-7904-7906-7912-7914-7916-7918-7920-225-224-7843-227-7841-259-226-273-233-232-7867-7869-7865-234-237-236-7881-297-7883-243-242-7887-245-7885-244-417-250-249-7911-361-7909-432-253-7923-7927-7929-7925-193-192-7842-195-7840-258-194-272-201-200-7866-7868-7864-202-205-204-7880-296-7882-211-210-7886-213-7884-212-416-218-217-7910-360-7908-431-221-7922-7926-7928-7924-10"
Const sTelex = "aws-awf-awr-awx-awj-aas-aaf-aar-aax-aaj-ees-eef-eer-eex-eej-oos-oof-oor-oox-ooj-ows-owf-owr-owx-owj-uws-uwf-uwr-uwx-uwj-AWS-AWF-AWR-AWX-AWJ-AAS-AAF-AAR-AAX-AAJ-EES-EEF-EER-EEX-EEJ-OOS-OOF-OOR-OOX-OOJ-OWS-OWF-OWR-OWX-OWJ-UWS-UWF-UWR-UWX-UWJ-as-af-ar-ax-aj-aw-aa-dd-es-ef-er-ex-ej-ee-is-if-ir-ix-ij-os-of-or-ox-oj-oo-ow-us-uf-ur-ux-uj-uw-ys-yf-yr-yx-yj-AS-AF-AR-AX-AJ-AW-AA-DD-ES-EF-ER-EX-EJ-EE-IS-IF-IR-IX-IJ-OS-OF-OR-OX-OJ-OO-OW-US-UF-UR-UX-UJ-UW-YS-YF-YR-YX-YJ- vbE "
Const sVni = "a81-a82-a83-a84-a85-a61-a62-a63-a64-a65-e61-e62-e63-e64-e65-o61-o62-o63-o64-o65-o71-o72-o73-o74-o75-u71-u72-u73-u74-u75-A81-A82-A83-A84-A85-A61-A62-A63-A64-A65-E61-E62-E63-E64-E65-O61-O62-O63-O64-O65-O71-O72-O73-O74-O75-U71-U72-U73-U74-U75-a1-a2-a3-a4-a5-a8-a6-d9-e1-e2-e3-e4-e5-e6-i1-i2-i3-i4-i5-o1-o2-o3-o4-o5-o6-o7-u1-u2-u3-u4-u5-u7-y1-y2-y3-y4-y5-A1-A2-A3-A4-A5-A7-A6-D9-E1-E2-E3-E4-E5-E6-I1-I2-I3-I4-I5-O1-O2-O3-O4-O5-O6-O7-U1-U2-U3-U4-U5-U7-Y1-Y2-Y3-Y4-Y5- vbE "
Const sXoaDau = "a-a-a-a-a-a-a-a-a-a-e-e-e-e-e-o-o-o-o-o-o-o-o-o-o-u-u-u-u-u-A-A-A-A-A-A-A-A-A-A-E-E-E-E-E-O-O-O-O-O-O-O-O-O-O-U-U-U-U-U-a-a-a-a-a-a-a-d-e-e-e-e-e-e-i-i-i-i-i-o-o-o-o-o-o-o-u-u-u-u-u-u-y-y-y-y-y-A-A-A-A-A-A-A-D-E-E-E-E-E-E-I-I-I-I-I-O-O-O-O-O-O-O-U-U-U-U-U-U-Y-Y-Y-Y-Y-"
Function UT(ByVal mTex As String, Optional Bo As Byte = 1) As String 'chuyen kieu go unicode thanh kieu go telex
Dim i As Long
    Nguon = Split(sChrW, "-"):  KetQua = Split(sTelex, "-")
    For i = LBound(Nguon, 1) To UBound(Nguon, 1) - Bo
        mTex = Replace(mTex, ChrW$(Nguon(i)), KetQua(i))
    Next i
    UT = mTex
End Function
Function TU(ByVal mTex As String, Optional Bo As Byte = 1) As String'chuyen kieu go telex thanh unicode
Dim i As Long
    Nguon = Split(sTelex, "-"): KetQua = Split(sChrW, "-")
    For i = LBound(Nguon, 1) To UBound(Nguon, 1) - Bo
        mTex = Replace(mTex, Nguon(i), ChrW$(KetQua(i)))
    Next i
    TU = mTex
End Function
Function UV(ByVal mTex As String, Optional Bo As Byte = 1) As String'chuyen kieu go unicode thanh kieu go vni
Dim i As Long
    Nguon = Split(sChrW, "-"):  KetQua = Split(sVni, "-")
    For i = LBound(Nguon, 1) To UBound(Nguon, 1) - Bo
        mTex = Replace(mTex, ChrW$(Nguon(i)), KetQua(i))
    Next i
    UV = mTex
End Function
Function VU(ByVal mTex As String, Optional Bo As Byte = 1) As String'chuyen kieu go vni thanh unicode
Dim i As Long
    Nguon = Split(sVni, "-"):   KetQua = Split(sChrW, "-")
    For i = LBound(Nguon, 1) To UBound(Nguon, 1) - Bo
        mTex = Replace(mTex, Nguon(i), ChrW$(KetQua(i)))
    Next i
    VU = mTex
End Function
Function mTV(ByVal mTex As String, Optional Bo As Byte = 1) As String'xoa dau tieng viet
Dim i As Long
    Nguon = Split(sChrW, "-"):  KetQua = Split(sXoaDau, "-")
    For i = LBound(Nguon, 1) To UBound(Nguon, 1) - Bo
        mTex = Replace(mTex, ChrW$(Nguon(i)), KetQua(i))
    Next i
    mTV = mTex
End Function
=UT("Thí nghiệm") => This nghieejm
=TU("This nghieejm") => Thí nghiệm
=UV("Thí nghiệm") => Thi1 nghie65m
=VU("Thi1 nghie65m") => Thí nghiệm
=mTV("Thí nghiệm") => Thi nghiem
code không áp dụng cho tiếng anh nha bạn. This thì nó sẽ thành Thí chứ không thông minh đến nỗi nhận biết nó là tiếng anh mà giữ lại nguyên mẫu đâu, khuyến khích chuyển thành kiểu VNI thì hay hơn
Mấy cái hằng số sao bạn vừa khai báo chữ thường vừa CHỮ HOA chi vậy? Tôi nghĩ chỉ cần dạng chữ thường là đủ, bởi trong VBA hàm UCase hỗ trợ Unicode mà
 
Upvote 0
Mấy cái hằng số sao bạn vừa khai báo chữ thường vừa CHỮ HOA chi vậy? Tôi nghĩ chỉ cần dạng chữ thường là đủ, bởi trong VBA hàm UCase hỗ trợ Unicode mà
tại em thấy chữ á với chữ Á có 2 mã chrw khác nhau ấy thầy. hay là có mã cho từng dấu vậy thầy.
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom