Cara Mendapatkan Kembali 10 Baris Terakhir dari Fail Teks Besar-besaran dengan Cekap (> 10 GB)
Memaparkan 10 baris terakhir yang luas fail teks boleh mencabar, terutamanya apabila saiz fail melebihi 10 gigabait. Untuk penyelesaian yang cekap, pertimbangkan pendekatan berikut:
Pada mulanya, lintasi fail ke hujungnya. Seterusnya, bergerak ke belakang secara sistematik, mencari 10 baris baharu berturut-turut. Setelah ditemui, baca ke hadapan hingga kesimpulan, memberi perhatian kepada pengekodan aksara yang berbeza.
Kendalikan senario di mana fail mempunyai kurang daripada 10 baris dengan melaraskan proses dengan sewajarnya. Di bawah ialah pelaksanaan dalam C#:
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 the case where the file has fewer than numberOfTokens lines fs.Seek(0, SeekOrigin.Begin); buffer = new byte[fs.Length]; fs.Read(buffer, 0, buffer.Length); return encoding.GetString(buffer); } }
Kaedah ini melaraskan secara dinamik kepada bilangan token sebenar dalam fail, menjadikannya berkesan untuk fail dengan bilangan baris yang berbeza-beza.
Atas ialah kandungan terperinci Bagaimana Cara Membaca 10 Baris Terakhir Fail Teks Besar dengan Cekap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!