• Mong giúp đỡ về unicode tổ hợp và dựng sẵn
  • RE: Mong giúp đỡ về unicode tổ hợp và dựng sẵn

    Minh Tiên > 26-10-19, 11:29 AM

    Chào cả nhà !

    Sau 1 t/g mày mò mình phát hiện ra lỗi chuyển sai tập trung chủ yếu vào các chữ In hoa vì hàm dò tìm chữ In hoa ko thực hiện được, chỉ do được chữ thường.

    Khắc phục: Khai báo có phân biệt chữ In và chữ thường.
    Cụ thể: Thay Option Compare Database thành Option Compare Binary trong Module.

    Mình đang dùng office 365 hoạt động OK, ko biết ACE dùng Office khác thế nào. Xin chia sẻ.

    Thân./.
  • RE: Mong giúp đỡ về unicode tổ hợp và dựng sẵn

    ongke0711 > 26-10-19, 12:08 PM

    (26-10-19, 11:29 AM)Minh Tiên Đã viết: Chào cả nhà !

    Sau 1 t/g mày mò mình phát hiện ra lỗi chuyển sai tập trung chủ yếu vào các chữ In hoa vì hàm dò tìm chữ In hoa ko thực hiện được, chỉ do được chữ thường.

    Khắc phục: Khai báo có phân biệt chữ In và chữ thường.
    Cụ thể: Thay Option Compare Database thành Option Compare Binary trong Module.

    Mình đang dùng office 365 hoạt động OK, ko biết ACE dùng Office khác thế nào. Xin chia sẻ.

    Thân./.

    Việc khắc phục đơn giản vậy mà mình không nghĩ ra.
    Còn việc chuyển đổi từ Tổ hợp sang dựng sẳn thì tôi định làm như sau: 
    - Gõ toàn bộ các ký tự có dấu TV theo kiểu tổ hợp rồi đổi sang mã Hex. Đưa vào mảng tohop_bytes
    Gõ toàn bộ các ký tự có dấu TV theo kiểu dựng sẵn rồi đổi sang mã Hex. Đưa vào mảng dungsan_bytes
    - Khi dò từ ký tự trong chuỗi, chuyển sang Hex (dùng AscW()) rồi đối chiếu vào mảng nào mình cần rồi đối chiếu với mảng kia, sau đó dùng hàm Chrw() để chuyển thành ký tự.


  • RE: Mong giúp đỡ về unicode tổ hợp và dựng sẵn

    Minh Tiên > 26-10-19, 01:16 PM

    (26-10-19, 12:08 PM)ongke0711 Đã viết:
    (26-10-19, 11:29 AM)Minh Tiên Đã viết: Chào cả nhà !

    Sau 1 t/g mày mò mình phát hiện ra lỗi chuyển sai tập trung chủ yếu vào các chữ In hoa vì hàm dò tìm chữ In hoa ko thực hiện được, chỉ do được chữ thường.

    Khắc phục: Khai báo có phân biệt chữ In và chữ thường.
    Cụ thể: Thay Option Compare Database thành Option Compare Binary trong Module.
    Mình đang dùng office 365 hoạt động OK, ko biết ACE dùng Office khác thế nào. Xin chia sẻ.
    Thân./.
    Việc khắc phục đơn giản vậy mà mình không nghĩ ra.
    Còn việc chuyển đổi từ Tổ hợp sang dựng sẳn thì tôi định làm như sau: 
    - Gõ toàn bộ các ký tự có dấu TV theo kiểu tổ hợp rồi đổi sang mã Hex. Đưa vào mảng tohop_bytes
    Gõ toàn bộ các ký tự có dấu TV theo kiểu dựng sẵn rồi đổi sang mã Hex. Đưa vào mảng dungsan_bytes
    - Khi dò từ ký tự trong chuỗi, chuyển sang Hex (dùng AscW()) rồi đối chiếu vào mảng nào mình cần rồi đối chiếu với mảng kia, sau đó dùng hàm Chrw() để chuyển thành ký tự.
    Vụ này Tiên đã nghĩ cách làm rồi, chỉ cần quy ngược lại theo Code trên thôi. Dò mãng s_DungSan trước => trong S_ToHop. Mình có bảng Index của 2 mãng là OK
    Thân./.
  • RE: Mong giúp đỡ về unicode tổ hợp và dựng sẵn

    Minh Tiên > 26-10-19, 01:32 PM

    Bảng Index theo code trên !
    Bảng Index
    Thân./.
  • RE: Mong giúp đỡ về unicode tổ hợp và dựng sẵn

    ongke0711 > 26-10-19, 07:15 PM

    (26-10-19, 01:32 PM)Minh Tiên Đã viết: Bảng Index theo code trên !
    Bảng Index
    Thân./.

    Tôi không nghĩ bảng mã này đúng đâu bạn. Bạn dùng bảng mã nào vậy?
    Hiện nay nên dùng các bảng mã: Latin Extended A, Latin Extended Additional thì mới chính xác hơn.
    Vd: Chữ "Ế" - Mã Decimal:
    Dựng sẵn: 7870
    Tổ hợp: 202 769 (kết hợp 2 bytes) -> cái khó nằm ở đây.
    Khi chuyển từ dựng sẵn sang tổ hơp, nó phải dùng 2 byte để thể hiện ký tự: 202 cho ký tự "Ê" và 769 cho dấu sắc. Nhưng khi tôi kết hợp thì cái dấu sắc nó không nằm trên chữ "Ê" mà nó nằm kế bên. 014 . Phải ngâm cứu thêm thôi.
  • RE: Mong giúp đỡ về unicode tổ hợp và dựng sẵn

    Minh Tiên > 26-10-19, 08:13 PM

    Vụ Byte biết jj đó .. họ đã làm giúp mình ở Private Sub InitVietnameseStr rồi (Ko để ý nữa).
    Họ chạy tới đc thì mình chạy lui cũng đc thôi.
    Chỉ cần tra trong Tổ hợp theo Dựng sẳn theo Index là OK (>15 mới có khác biệt).
    Lấy 2 ký tự trong S_To_Hop mới hiển thị dấu !

    Mình đã chạy Unicode Dựng sẳn sang Unicode Tổ hợp OK rồi.
    Thay đổi code này:
    Mã:
    Public Function SourceToDest(ByVal text As String, source As convert_source, dest As convert_dest) As String
     
      Dim s As String, Temp As String, kytu2 As String
      Dim n As Long, index As Long, k As Long
      Dim nr As Long
      If source = dest And source <> src_uni Then
          SourceToDest = text
          Exit Function
      End If
      InitVietnameseStr
      text = text & " "
      s = ""
      n = 1
      k = Len(text)
      While n < k
          nr = 0
          Select Case source
          Case src_uni
              kytu2 = Mid(text, n, 1)
              If source = src_uni Then
                  index = InStr(1, s_dung_san, kytu2)
                  If index > 14 Then
                      nr = (2 * index - 15)
                      n = n + 1
                  Else
                        nr = InStr(1, s_dung_san, kytu2)
                        n = n + 1
                  End If
              End If
          End Select
          If nr > 14 Then
              Select Case dest
              Case dst_uni: kytu2 = Mid(s_to_hop, nr, 2)
              End Select
          End If
          s = s & kytu2
      Wend
      SourceToDest = s
    End Function

    Mình lấy code cũ chưa làm cho các bảng mã khác nên để nguyên các Select Case và If (Chưa sắp xếp lại).
    Mình đã text từ Access rồi Copy sang Excel lọc, ... => Kết quả OK.
    ACE nhà ta text thử nhé !
    Thân./.