Nhờ tạo code xóa những dòng trùng nhau

Liên hệ QC

MinhKhai

Giải pháp Ếc-xào
Tham gia
16/4/08
Bài viết
934
Được thích
568
Em có file như đính kèm, đang loay hoay mà không xử lý được, nhờ giúp
1. Xóa dòng trùng
Trong file có 1 số dòng trùng đến phần phút (không tính phần giây), em muốn xóa nó đi là không biết cách
Em đã thử cho NumberFormat = "dd/mm/yyyy hh:mm" rồi dùng Remove Duplicates nhưng có vẻ sai cách.

219924

2. File đính kèm được dùng để nhập dữ liệu từ txt file, sau khi nhập xong thì làm mấy việc như trong file đã nêu. Quá trình này trên máy em chạy mất 5-7s. Em nghĩ trong file có những đoạn code ngô nghê nên khiến máy chạy chậm. Anh chị nào rảnh rỗi vui lòng sửa lại code để tăng tốc giúp em.

3. Quá trình nhập dữ liệu từ Text file, luôn xuất hiện thêm Name. Em không rõ nguyên nhân vì sao nhưng xóa Name đi cũng không làm sao nên tạo đoạn code để xóa Name. Ai biết xin giải thích giúp

Xin cảm ơn
 

File đính kèm

  • 1561478734227.png
    1561478734227.png
    12.7 KB · Đọc: 0
  • GPE.rar
    331.3 KB · Đọc: 9
Lần chỉnh sửa cuối:
@ongke0711:
Ở đây chỉ lọc trùng chứ không cần tổng cho nên có thể Group nhiều trường có function làm cho bạn bị chậm.
Bạn thử cải tiến bằng Select Distinct/DistinctRow xem sao?

Chú: một lựa chọn nữa là dùng Union
Select f1, f2, f3 From bang1
Union
(Select f1, f2, f3 From bang1 where 1=0)
Cái subquery chỉ là cái bù nhìn, trả về 0 dòng. Mục đích là lợi dụng Union để lọc duy nhất.

Em đã thử cái Distinct (không dùng DistinctRow) và tốc độ cũng không cải thiện gì mấy. Sở dĩ Em dùng Total query là vì muốn dùng các hàm First, Last của nó để lấy chính xác theo giây dòng IN sớm nhất và dòng OUT trễ nhất nhưng...giờ nghĩ lại mới thấy là không cần như vậy vì nó không có ý nghĩa gì trong trường hợp này. Dùng Distinct là gọn nhất.
Có test cái Union query và tốc độ cũng không đáng kể. :)
 
Upvote 0
Code mình còn có thể optimize xuống 1/3 nữa, bỏ 2 hàm sort và removeduplicates của excel.
Tốn memory 1 chút. Add từng dòng của arrLines vào 1 dictionary, làm key. Dictionary sẽ remove duplicates và sort giúp ta.
 
Upvote 0
Code mình còn có thể optimize xuống 1/3 nữa, bỏ 2 hàm sort và removeduplicates của excel.
Tốn memory 1 chút. Add từng dòng của arrLines vào 1 dictionary, làm key. Dictionary sẽ remove duplicates và sort giúp ta.

Trước giờ tôi cứ nghĩ việc xử lý từng dòng sẽ làm chậm đi giống như vòng lặp vậy đó chứ. :)
 
Upvote 0
Trước giờ tôi cứ nghĩ việc xử lý từng dòng sẽ làm chậm đi giống như vòng lặp vậy đó chứ. :)
Bên trong ACE/JET cũng phải dùng vòng lặp để lượt từng dòng.
Tự căn bản, CSDL LH đã là chậm. Access xử lý bảng tính cũng như một bảng text, không có index nên khó thể hiệu quả. Nếu chúng là một bảng trong Access hay SQL Server gì đó thì người ta còn hy vọng thêm index, chẻ partition,... để cải tiến.

Mặt khác, nếu nói về tốc độ thì lúc đo, quý vị đo từ đâu đến đâu? ADO phải gánh thêm cái nặng kết nối. Và tuỳ theo phiên bản, kết nối với file khác sẽ nặng hơn hay nhẹ hơn file chạy code.
Muốn đo thực tốc độ của truy vấn thì phải đo sau khi đã kết nối.
 
Upvote 0
Bên trong ACE/JET cũng phải dùng vòng lặp để lượt từng dòng.
Tự căn bản, CSDL LH đã là chậm. Access xử lý bảng tính cũng như một bảng text, không có index nên khó thể hiệu quả. Nếu chúng là một bảng trong Access hay SQL Server gì đó thì người ta còn hy vọng thêm index, chẻ partition,... để cải tiến.

Mặt khác, nếu nói về tốc độ thì lúc đo, quý vị đo từ đâu đến đâu? ADO phải gánh thêm cái nặng kết nối. Và tuỳ theo phiên bản, kết nối với file khác sẽ nặng hơn hay nhẹ hơn file chạy code.
Muốn đo thực tốc độ của truy vấn thì phải đo sau khi đã kết nối.

Đúng đó anh. Khi chạy query này trong Access thì thời gian xử lý cũng nhanh tương tự file v3 của bạn CuAnh. Bởi vậy nên chọn công cụ nào phù hợp với nền tảng đang phát triển mới phát huy được thế mạnh của nó.
 
Upvote 0
Theo sau vụ LON thì tới nick mình cũng nhạy cảm, vi phạm thuần phong mĩ tục, cấm nuôn ;)
2 admin: có cách nào đổi nick không bác ?

Trong file 222.txt của bạn MinhKhai, có vài dị dạng format, như NameNV là số, lâu lâu xuất hiện i thường, o thường.
Mình phải fix lại chút nếu không thì remove duplicates chạy sai.
Code ADO, SQL của ông kẹ có bypass được trường hợp đó không ?

Mình mới update file testfile.csv và upload lại file. Code của bạn ongke ra kết quả hơn code mình đúng 1 dòng. Tìm chưa ra tại sao !
 
Lần chỉnh sửa cuối:
Upvote 0
Xong rồi, đang đợi chủ thớt up file txt bự nhất lên để test. Sau khi sort và remove duplicate thì code mình chạy = 1/3 - 1/4 code bạn.
Code bạn ongke có lỗi, khi có lỗi xảy ra, nó cứ xóa mất tiêu cái header, làm phải gõ lại hoài.
Các bạn test lại giùm, cũng chưa ưng ý lắm và chắc còn lỗi.
Code của anh chạy nhanh thật.
Do không biết sửa Code để chạy trong Office x64 nên em phải cài lại Windows và Office để test.
Sử dụng Office x86 cũng có 1 số bất tiện. Bác xem có thể cài code chạy được cả Office x86 và Office x64 không ?
 
Upvote 0
Mấy cái Api kia của ông kẹ đó, hỏi ông kẹ đi. Tui chỉ có Api timeGetTime thôi, xóa đi
 
Upvote 0
Xin phép ông kẹ nhé, tui úp lại file cho bạn Minh Khai, chỉ dùng phần import txt, nên mấy code về ADO, API Browse file và CSV, tui remove hết.
Bạn Minh Khai down lại nhen, về thêm mắm thêm muối đúng theo yêu cầu của bạn.
Siêng thiệt chứ, có chút xíu đó mà phải cài lại Windows với Office. Quá nể ;)
Sao các bác cứ đụng 1 chút là cài lại Windows, Office thế nhỉ ? Lạ...
 

File đính kèm

  • GPE_v4.zip
    277 KB · Đọc: 9
Upvote 0
Xin phép ông kẹ nhé, tui úp lại file cho bạn Minh Khai, chỉ dùng phần import txt, nên mấy code về ADO, API Browse file và CSV, tui remove hết.
Bạn Minh Khai down lại nhen, về thêm mắm thêm muối đúng theo yêu cầu của bạn.
Siêng thiệt chứ, có chút xíu đó mà phải cài lại Windows với Office. Quá nể ;)
Sao các bác cứ đụng 1 chút là cài lại Windows, Office thế nhỉ ? Lạ...

Bác cứ xoá thoải mái. Chủ yếu là trao đổi các cách để ra cái cách tối ưu nhất thôi. Tôi còn phải học hỏi bác CuAnh nhiều.
 
Upvote 0
Web KT
Back
Top Bottom