Lấy dữ liệu từ file TXT đồng thời loại dấu tiếng Việti (1 người xem)

Liên hệ QC

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

tlthlnmtnn

Thành viên mới
Tham gia
1/4/12
Bài viết
37
Được thích
2
Mình có file này
sites.google.com/site/lop11lcth/gram.rar

Giờ mình muốn để từng dòng đó vào file excel sao cho
cột A có phần chữ thôi xóa đi phần số
cột B là phần chữ được biến đổi thành không dấu
Nếu full dòng thì làm bên sheet 2, cũng tương tự như vậy

VD:
A1: đổi chữ -> B1: doi chu

Vì số lượng nhiều wá nên không thể làm tay được, ai giúp đỡ mình với
 
Mình có file này
sites.google.com/site/lop11lcth/gram.rar

Giờ mình muốn để từng dòng đó vào file excel sao cho
cột A có phần chữ thôi xóa đi phần số
cột B là phần chữ được biến đổi thành không dấu
Nếu full dòng thì làm bên sheet 2, cũng tương tự như vậy

VD:
A1: đổi chữ -> B1: doi chu

Vì số lượng nhiều wá nên không thể làm tay được, ai giúp đỡ mình với
Bạn lưu ý về cách đặt TIÊU ĐỀ nhé. Tiêu đề chung chung sẽ bị xóa bài
Lần này tôi sửa lại tiêu đề cho bạn (vì thấy chủ đề cũng hay hay)
---------------------------------------------
Code bạn cần trong file Excel là:
Mã:
Public dic As Object
Function RemoveMarks(ByVal Text As String) As String
  Dim CharCode, i As Long
  Dim sTmp As String, sChr As String
  On Error Resume Next
  sTmp = Text
  If dic Is Nothing Then
    Set dic = CreateObject("Scripting.Dictionary")
    CharCode = Array(7855, 7857, 7859, 7861, 7863, 7845, 7847, 7849, 7851, 7853, 225, _
                     224, 7843, 227, 7841, 259, 226, 273, 7871, 7873, 7875, 7877, 7879, _
                     233, 232, 7867, 7869, 7865, 234, 237, 236, 7881, 297, 7883, 7889, _
                     7891, 7893, 7895, 7897, 7899, 7901, 7903, 7905, 7907, 243, 242, _
                     7887, 245, 7885, 244, 417, 7913, 7915, 7917, 7919, 7921, 250, _
                     249, 7911, 361, 7909, 432, 253, 7923, 7927, 7929, 7925)
    Const ResText = "aaaaaaaaaaaaaaaaadeeeeeeeeeeeiiiiiooooooooooooooooouuuuuuuuuuuyyyyy"
    For i = 0 To UBound(CharCode)
      dic.Add ChrW(CharCode(i)), Mid(ResText, i + 1, 1)
      dic.Add UCase(ChrW(CharCode(i))), UCase(Mid(ResText, i + 1, 1))
    Next
  End If
  For i = 1 To Len(sTmp)
    sChr = Mid(sTmp, i, 1)
    If dic.Exists(sChr) Then sTmp = Replace(sTmp, sChr, dic.Item(sChr))
  Next
  RemoveMarks = sTmp
End Function
Sub Main()
  Dim txtFile As String, vFile, tmp
  Dim fso As Object
  Dim arr, aRes()
  Dim lR As Long, lRs As Long, t As Double
  On Error Resume Next
  Set fso = CreateObject("Scripting.FileSystemObject")
  vFile = Application.GetOpenFilename("Text Files, *.txt")
  If TypeName(vFile) = "String" Then
    t = Timer
    txtFile = CStr(vFile)
    Application.StatusBar = "Processing data. Please wait..."
    With fso.OpenTextFile(txtFile, 1, , -1)
      tmp = Trim(.ReadAll)
      .Close
    End With
    If Len(tmp) Then
      arr = Split(tmp, vbCrLf)
      lRs = UBound(arr) + 1
      ReDim aRes(1 To lRs, 1 To 2)
      For lR = 1 To lRs - 1
        tmp = Split(arr(lR - 1), "|")
        aRes(lR, 1) = tmp(0)
        aRes(lR, 2) = RemoveMarks(tmp(0))
      Next
    End If
    Application.StatusBar = "Put data to spreadsheet. Please wait..."
    Range("A1:B1").Resize(lRs).Value = aRes
    MsgBox "Done!", , Format(Timer - t, "0.000")
  End If
  Set fso = Nothing
  Application.StatusBar = ""
End Sub
Cách dùng
- Copy toàn bộ code trên cho vào 1 module
- Chạy Sub Main, duyệt đến file TXT, bấm Open và chờ trong giây lát
- Đến khi hộp thông báo xuất hiện, hãy kiểm tra kết quả
Lưu ý rằng dữ liệu của bạn đến trên 530,000 dòng nên phải dùng Excel 2007 mới chứa được
 
Upvote 0
Thanks ndu96081631 nhiều!
tại vì mình vẫn chưa hiểu rõ diễn đàn cho lắm, thấy chữ những vấn đề chung nên tưởng post được!
còn tiêu đề thì tại mình không rõ phải diễn đạt ngắn gọn, rõ, sát nội dung thế nào cho phù hợp nên thấy chữ phải xóa dấu nên ghi là xử lý chữ thôi! (Vì mình định dùng WinVNkey để làm tự bỏ dấu nên cần nhiều cụm từ ấy mà, tuy nó không thể đoán chính xác vì có từ trùng nhưng thế này cũng tạm rồi!)
 
Lần chỉnh sửa cuối:
Upvote 0

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

Back
Top Bottom