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

Liên hệ QC MyVTV Add-ins

phuongnam366377

Thành viên chính thức
Tham gia ngày
25 Tháng mười 2019
Bài viết
76
Được thích
93
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
 

befaint

|||||||||||||
Tham gia ngày
6 Tháng một 2011
Bài viết
11,647
Được thích
14,050
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é.
 

Hau151978

Thành viên tích cực
Tham gia ngày
19 Tháng mười 2011
Bài viết
1,451
Được thích
1,397
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.
 

ongke0711

Thành viên tích cực
Tham gia ngày
7 Tháng chín 2006
Bài viết
891
Được thích
1,040
Giới tính
Nam
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.
 

ganbarou

Thành viên mới
Tham gia ngày
18 Tháng năm 2021
Bài viết
25
Được thích
3
Giới tính
Nam
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
 

befaint

|||||||||||||
Tham gia ngày
6 Tháng một 2011
Bài viết
11,647
Được thích
14,050
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.
 

Hau151978

Thành viên tích cực
Tham gia ngày
19 Tháng mười 2011
Bài viết
1,451
Được thích
1,397
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
 

ganbarou

Thành viên mới
Tham gia ngày
18 Tháng năm 2021
Bài viết
25
Được thích
3
Giới tính
Nam
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
 

ganbarou

Thành viên mới
Tham gia ngày
18 Tháng năm 2021
Bài viết
25
Được thích
3
Giới tính
Nam

File đính kèm

  • PEC_20210603.rar
    89.1 KB · Đọc: 9

befaint

|||||||||||||
Tham gia ngày
6 Tháng một 2011
Bài viết
11,647
Được thích
14,050
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
 

Hau151978

Thành viên tích cực
Tham gia ngày
19 Tháng mười 2011
Bài viết
1,451
Được thích
1,397
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
 

Hau151978

Thành viên tích cực
Tham gia ngày
19 Tháng mười 2011
Bài viết
1,451
Được thích
1,397
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.
 
Top Bottom