Pendapatan Cekap 10 Baris Terakhir daripada Fail Teks Besar
Menentukan pendekatan paling cekap untuk mengekstrak 10 baris terakhir daripada teks yang sangat besar fail (melebihi 10GB) memerlukan strategi yang meminimumkan pengiraan overhead.
Menggunakan Kedudukan Fail dan Reverse Seek
Pendekatan yang disyorkan ialah menavigasi ke hujung fail menggunakan kaedah Seek() dan bergerak ke belakang secara beransur-ansur dalam fail sehingga menemui 10 baris baharu. Dengan mengekalkan kiraan baris, kaedah mengenal pasti titik permulaan yang tepat untuk membaca ke hadapan dan mendapatkan semula baris yang dikehendaki. Strategi ini cekap mengendalikan fail dengan bilangan baris yang berbeza-beza, termasuk yang mempunyai kurang daripada 10.
Contoh Pelaksanaan dalam C#
Kod C# berikut menunjukkan pelaksanaan pendekatan yang disebutkan di atas, digeneralisasikan untuk mencari nomborOfToken terakhir dalam fail yang dikodkan dengan pengekodan dan dipisahkan oleh tokenSeparator:
public static string ReadEndTokens(string path, Int64 numberOfTokens, Encoding encoding, string tokenSeparator) { int sizeOfChar = encoding.GetByteCount("\n"); byte[] buffer = encoding.GetBytes(tokenSeparator); using (FileStream fs = new FileStream(path, FileMode.Open)) { Int64 tokenCount = 0; Int64 endPosition = fs.Length / sizeOfChar; for (Int64 position = sizeOfChar; position < endPosition; position += sizeOfChar) { fs.Seek(-position, SeekOrigin.End); fs.Read(buffer, 0, buffer.Length); if (encoding.GetString(buffer) == tokenSeparator) { tokenCount++; if (tokenCount == numberOfTokens) { byte[] returnBuffer = new byte[fs.Length - fs.Position]; fs.Read(returnBuffer, 0, returnBuffer.Length); return encoding.GetString(returnBuffer); } } } // handle case where number of tokens in file is less than numberOfTokens fs.Seek(0, SeekOrigin.Begin); buffer = new byte[fs.Length]; fs.Read(buffer, 0, buffer.Length); return encoding.GetString(buffer); } }
Dengan menggunakan teknik ini, pengambilan semula 10 baris terakhir daripada fail teks yang besar dicapai dengan penggunaan memori yang minimum dan kerumitan pengiraan, menyediakan penyelesaian yang cekap untuk senario pemprosesan fail biasa ini.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mendapatkan Kembali 10 Baris Terakhir daripada Fail Teks yang Sangat Besar?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!