檢索海量文字檔案(超過10GB)的最後10 行
在文字處理領域,一個常見的挑戰是提取非常大的文字檔案的最後幾行。當處理超過 10GB 的檔案時,傳統方法可能會力不從心。本文使用 C# 提出了此問題的有效解決方案,並提供了一個程式碼片段來演示其實作。
為了有效檢索最後 10 行,該策略涉及從末尾向後遍歷文件。由於行數可能是可變的,因此我們迭代地向後查找,直到遇到 10 個換行符。到達此點後,我們向前讀取剩餘內容以捕獲最後 10 行。
考慮以下實作:
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); } }
此程式碼處理下列情況:檔案小於10,並適當調整讀取操作。編碼參數允許根據檔案的編碼進行自訂,並且可以使用 tokenSeparator 來檢索不同分隔符號的最後連續元素。
透過採用這種方法,您可以有效地檢索海量文字的最後 10 行文件,確保高效處理和準確結果。
以上是如何在C#中高效率讀取10GB文字檔的最後10行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!