Làm thế nào để tăng tốc độ đọc File txt (>100Mb) bị Encoding

Liên hệ QC
Bạn dùng fso readall để đọc nội dung file vào string rồi dùng split để tách string vào array.
Bài đã được tự động gộp:


Cái này là xử lý text chứ có phải csdl đâu bạn.
CSDL hay xử lý Text thì cứ cho hết Vào SQLite xong lấy ra mà xử nhanh lắm ... thử cho 10GB vào File Text xong cho 10GB vào file CSDL SQLite xong lấy ra mà xử đi xem biết ngay và luôn thôi

CSDL SQLite hổ trợ tối đa 2048 GB ... nó lưu dưới dang byte gì đó ( ko nhớ chính xác ) nên rất nhanh
 
Lúc đầu em dung FSO rồi nhưng không dùng được. Ví dụ em muốn trích xuất tất cả các câu có chữ 領域数 và dùng chữ này làm từ khóa để tìm thì sẽ không trích xuất được câu nào cả.
Bạn chuyển tập tin đó về định dạng UTF-8 with BOM là được.

Tìm google cách chuyển nhé.
 
CSDL hay xử lý Text thì cứ cho hết Vào SQLite xong lấy ra mà xử nhanh lắm ... thử cho 10GB vào File Text xong cho 10GB vào file CSDL SQLite xong lấy ra mà xử đi xem biết ngay và luôn thôi

CSDL SQLite hổ trợ tối đa 2048 GB ... nó lưu dưới dang byte gì đó ( ko nhớ chính xác ) nên rất nhanh
Max file size khoảng 140TB thì phải. Nhưng để dùng thì còn phải import nữa.
 
Không biết FreeFile đọc file chữ Nhật Bổn và khi ghi xuống có bị mất định dạng ký tự không nhỉ? Tôi chưa có thử, chứ dùng Freefile đọc, lấy chuỗi theo yêu cầu rồi ghi ra một file Text khác cũng nhanh lắm (chừng 1, 2s đối với file text 120MB, 1tr dòng). Việc ghi lại toàn bộ file Text vừa xử lý vào Excel tôi nghĩ nhanh hơn xử lý từng dòng rồi ghi xuống Sheet.
Đối với trường hợp trên tốn thời gian là thời gian ghi xuống Sheet Excel.
 
Bạn chuyển tập tin đó về định dạng UTF-8 with BOM là được.

Tìm google cách chuyển nhé.
cách này của anh em cũng thử rồi, cách này sẽ hợp lý nếu chỉ lấy thông tin trên 1 file, còn trường hợp lấy ở nhiều file khác nhau mà vẫn dùng VBA để chuyển đổi thì tốc độ cũng không cải thiện mấy :v
 
Không biết FreeFile đọc file chữ Nhật Bổn và khi ghi xuống có bị mất định dạng ký tự không nhỉ? Tôi chưa có thử, chứ dùng Freefile đọc, lấy chuỗi theo yêu cầu rồi ghi ra một file Text khác cũng nhanh lắm (chừng 1, 2s đối với file text 120MB, 1tr dòng). Việc ghi lại toàn bộ file Text vừa xử lý vào Excel tôi nghĩ nhanh hơn xử lý từng dòng rồi ghi xuống Sheet.
Đối với trường hợp trên tốn thời gian là thời gian ghi xuống Sheet Excel.
Dính cái BOM anh ơi.
Chưa kể os tiếng jav lắm cái dị thường lắm. :)

cách này của anh em cũng thử rồi, cách này sẽ hợp lý nếu chỉ lấy thông tin trên 1 file, còn trường hợp lấy ở nhiều file khác nhau mà vẫn dùng VBA để chuyển đổi thì tốc độ cũng không cải thiện mấy :v
Bạn xem cài đặt trên phần mềm xuất logfile.txt ấy.
Hoặc đơn giản dùng tay đổi cũng được.
 
Bạn dùng Notepad tạo file trống, đặt tên là bomonly.txt, save as dưới dạng UTF-8 with BOM. Copy file này vào thư mục chứa file không có BOM, ví dụ D:\x, tạo thêm folder con D:\x\bom. Mở CMD, chạy các lệnh:
C:\>D:
D:\>cd x
D:\x>for %f in (*.*) do copy/b bomonly.txt+"%f" "bom\%f"
Các file có BOM sẽ nằm trong folder bom
 
Bạn dùng Notepad tạo file trống, đặt tên là bomonly.txt, save as dưới dạng UTF-8 with BOM. Copy file này vào thư mục chứa file không có BOM, ví dụ D:\x, tạo thêm folder con D:\x\bom. Mở CMD, chạy các lệnh:
C:\>D:
D:\>cd x
D:\x>for %f in (*.*) do copy/b bomonly.txt+"%f" "bom\%f"
Các file có BOM sẽ nằm trong folder bom

Có vẻ không hoạt động với file tạo ra bởi UNIX
1623308176576.png

D:\x>for %f in (*.*) do copy/b bomonly.txt+"%f" "bom\%f"
em hỏi thêm: cái này có giống với thao tác mở file lên rồi lưu lại với lựa chon mã hóa UTF-8 BOM không anh :v
 
Bạn thử đi hoặc gửi 1 file nhỏ lên xem.
 

File đính kèm

  • PEC_20210603.rar
    89.1 KB · Đọc: 9
liên quan đến linux, em dùng ubuntu để chuyển đổi thì gặp phải ký tự ① là ubuntu báo lỗi, rồi không chuyển đổi nữa @@

Em kiếm được cái file nhỏ, các anh có thể xem qua

Cái này chỉ đổi trên máy tính của bạn thôi, sang máy tính khác vỡ nát vì không có BOM.

1623310593745.png
 
File của bạn ngăn cách bằng ký tự LF (mã 10), không phải CRLF. Mình sử dụng FSO thì vẫn thấy đọc được, không biết máy bạn lỗi ở đâu. Máy mình cũng không có font jav.
Mã:
Sub FSO1()
    Dim fso As FileSystemObject, txtFile As Object, arr
    Dim Str As String
    Set fso = New FileSystemObject
    Set txtFile = fso.OpenTextFile(ThisWorkbook.Path & "\PEC_20210603.log")
    Str = txtFile.ReadAll
    txtFile.Close
    arr = Split(Str, vbLf)
    Sheet1.Range("A1") = arr(14)
End Sub
 
Thấy befaint còn bảo làm việc thường xuyên với nó cơ!
 
Sau khi tìm hiểu thì mình thấy FSO opentextfile chỉ hỗ trợ Unicode dạng UTF 16 LE. Dùng word có thể mở file dạng EUC JP rồi saveas dạng này nhưng lưu lượng file sẽ tăng dẫn đến tốc độ load file giảm, nhất là khi dùng HDD. Vì vậy nếu bạn có SSD, thường xuyên sử dụng các file trên thì có thể thử rồi so sánh tốc độ xử lý giữa Stream và FSO.
 
Web KT
Back
Top Bottom