Bo dau tieng Viet

Thảo luận trong 'Ứng dụng Excel' bắt đầu bởi Whiterose, 21 Tháng năm 2005.

2,833 lượt xem

  1. Whiterose

    Whiterose Thành viên hoạt động

    Bài viết:
    6
    Đã được thích:
    0
    Nơi ở:
    HCMC
    Xin hỏi cách chuyển tiếng Việt có dấu thành ko dấu ko?
     
    Last edited: 2 Tháng mười một 2005
    #1
  2. StonyHeartedMan

    StonyHeartedMan Thành viên sơ cấp

    Bài viết:
    306
    Đã được thích:
    2
    Nơi ở:
    Hà nội
    TCVN3ToVNWithoutMark

    Public Function TCVN3ToVNWithoutMark(ByVal strTCVN3 As String) As String
    '******************************************************************************
    '* *
    '* Name: TCVN3ToVNWithoutMark *
    '* *
    '* Purpose: Convert string in TCVN3 format to vietnamese string without mark *
    '* *
    '* Returns: Vietnamese string without mark *
    '* *
    '******************************************************************************

    On Error GoTo TCVN3ToVNWithoutMark_Error
    Const strTCVN3Vowels = "¸µ¹¶·©ÊÇËÈÉ¢¨¾»Æ¼½¡®§ÐÌÑÎϪÕÒÖÓÔ£ãßäáâ«èåéæ礬íêîëì¥óïñòô­øõùö÷¦Ý×ÞØÜýúþûü"
    Const strVNWithoutMarkVowels = "aaaaaaaaaaaAaaaaaaAdDeeeeeeeeeeeEooooooooooooOoooooooOuuuuuuuuuuuUiiiiiyyyyy"

    Dim lngVowelPosition&, i&
    Dim strTemp As String

    strTemp = Trim$(strTCVN3)

    If Len(strTemp) = 0 Then
    GoTo TCVN3ToVNWithoutMark_Done
    End If

    '// Convert TCVN3 string to Vietnamese string without mark
    For i = 1 To Len(strTemp)
    lngVowelPosition = InStr(1, strTCVN3Vowels, mID$(strTemp, i, 1), vbBinaryCompare)
    If lngVowelPosition <> 0 Then
    strTemp = left$(strTemp, i - 1) & mID$(strVNWithoutMarkVowels, lngVowelPosition, 1) & mID$(strTemp, i + 1)
    End If
    Next

    '// Return vietnamese string without mark
    TCVN3ToVNWithoutMark = strTemp

    TCVN3ToVNWithoutMark_Done:
    Exit Function

    TCVN3ToVNWithoutMark_Error:
    Resume TCVN3ToVNWithoutMark_Done
    End Function

    ==================================================

    Trên đây là hàm VB chuyển đổi đoạn text tiếng Việt (sử dụng bộ mã TCVN3) sang đoạn text ko có dấu. Các bạn hãy làm tương tự cho đoạn text gõ bằng mã Unicode nhé.
     
    #2
  3. Bình_OverAC

    Bình_OverAC Over Abnormal / Crazy

    Bài viết:
    845
    Đã được thích:
    7
    Nơi ở:
    Nha Trang
    Điều này không dể dàng đâu anh ơi. Nếu được anh giúp hộ mọi người đoạn Code đó luôn.
    Đoạn code của anh dùng cho font TCVN3 (chỉ phổ biến ở miền Bắc) không phổ biến trong Nam. Sắp tới em sẽ cố gắng đưa việc cắt bỏ dấu vào Convertfont3.2 của em. Nhưng em lại cũng cho rằng việc này là không cần thiết khi mà "Vietnamese Locale CP 1258" dần trở nên phổ biến
    Lưu ý với những ai chưa có hiểu biết về mã font mà muốn thay đổi đoạn code trên cho các loại font khác: Đoạn code trên sẽ không thể sửa lại cho tương tự đối với những người dùng font VNI hoặc font "Vietnamese Locale CP 1258".
     
    #3
  4. NgânGiang

    NgânGiang Cố lên! Cố lên...

    Bài viết:
    202
    Đã được thích:
    0
    Nơi ở:
    Trong Mây mù
    Không hiểu web này có bị sao không, mình đang soạn bài thì đứt (Báo là chưa logon). Thời gian qua (10 ngày) đi công tác thì không truy cập được.
    Đúng là chuyển bỏ dấu của font Unicode khó thật, mình phải dùng tạm UniKey 3.6 để chuyển đổi qua lại giữa các loại font chữ. Còn đây là đoạn VB của mình, hiện tại phù hợp với công việc của mình hơn UniKey

    ' Tach dau ra khoi chuoi dung cho font VNI
    Function Depbo_Dau_VNI(Chuoi)
    Dim Chuoimoi, Dodai, i, Ma
    Chuoi = Trim(Chuoi)
    Dodai = Len(Chuoi)
    Chuoimoi = ""
    For i = 1 To Dodai
    Ma = Asc(Mid(Chuoi, i, 1))
    If Ma > 31 And Ma < 127 Then
    Chuoimoi = Chuoimoi + Mid(Chuoi, i, 1)
    Else
    Select Case Mid(Chuoi, i, 1)
    Case "Ñ"
    Chuoimoi = Chuoimoi + "D"
    Case "ñ"
    Chuoimoi = Chuoimoi + "d"
    Case "Í", "Ì", "Æ", "Ó", "Ò"
    Chuoimoi = Chuoimoi + "I"
    Case "í", "ì", "æ", "ó", "ò"
    Chuoimoi = Chuoimoi + "i"
    Case "Ô"
    Chuoimoi = Chuoimoi + "O"
    Case "ô"
    Chuoimoi = Chuoimoi + "o"
    Case "Ö"
    Chuoimoi = Chuoimoi + "U"
    Case "ö"
    Chuoimoi = Chuoimoi + "u"
    End Select
    End If
    Next i
    Depbo_Dau_VNI = Chuoimoi
    End Function
     
    #4
  5. StonyHeartedMan

    StonyHeartedMan Thành viên sơ cấp

    Bài viết:
    306
    Đã được thích:
    2
    Nơi ở:
    Hà nội
    OverAC chú ý: Có thể OverAC ko có nhu cầu về việc bỏ dấu của 1 đoạn text đã gõ nên mới nói là việc này ko cần thiết. Mục tiêu đưa ra rất rõ ràng là:
    1 trường hợp nữa cần dùng đến việc loại bỏ dấu tiếng Việt là khi bạn cần in phiếu bán ở quầy siêu thị POS mà máy in ko support tiếng Việt trong khi tên mặt hàng ở database bạn lại gõ tiếng Việt.

    Xin nói lại là: Tôi chỉ trả lời theo đúng yêu cầu của câu hỏi bằng cách đưa ra 1 ví dụ chuyển 1 đoạn text từ TCVN3 sang Text ko có dấu. Việc đưa ví dụ trên chỉ là show ra 1 cách làm (bỏ cái từ thuật toán đi cho đỡ ghê ghớm) mà thôi. Hãy nhìn cách viết hàm, thủ tục, đặt tên biến, cách viết comments... là biết sự :biggrin: nhé (đấy là tôi đã cắt bỏ đoạn Error handle đi rồi đấy).

    Nhìn cái hàm đã sáng như ban ngày thế nên tôi nghĩ việc làm tương tự cho Unicode, VNI,... là hoàn toàn đơn giản. (cái hàm trên là 1 request cực nhỏ mà tôi yêu cầu nhân viên phải viết trong vòng 5 phút. Vậy tôi có cần viết lại hàm khác cho Unicode, VNI,v.v... ko? Chỉ cần biết cách là có thể viết thành 1 cái hàm tổng quát hóa rồi. Ai có thể viết cho tôi cái interface (hay còn gọi là prototype) của cái hàm tổng quát này ko nhỉ? - Chú ý comments cho đầy đủ nhé)

    Private Const CST_UnicodeVowels = "áàảãạăắằẳẵặâấầẩẫậéèẻẽẹêếềểễệíìỉĩịóòỏõọôốồổỗộơớờởỡợúùủũụưứừửữựýỳỷỹỵđÁÀẢÃẠĂẮẰẲẴẶÂẤẦẨẪẬÉÈẺẼẸÊẾỀỂỄỆÍÌỈĨỊÓÒỎÕỌÔỐỒỔỖỘƠỚỜỞỠỢÚÙỦŨỤƯỨỪỬỮỰÝỲỶỸỴĐ"

    (ui trời, viết lên đây nó lại biến hết thành chữ rõ ràng thế này rồi. thôi, tham khảo VNVowels ở cái link phía dưới nhé)

    VNI cung tương tự thôi.
    Các bạn có thể tham khảo các Vowels tại đây

    (Nhớ rename .zzip thành .zip nhé)
     
    Last edited: 23 Tháng năm 2005
    #5

Chia sẻ trang này