大規模なテキスト ファイル (> 10 GB) から最後の 10 行を効率的に取得する方法
膨大なテキスト ファイルの最後の 10 行を表示するテキスト ファイルは、特にファイルのサイズが 10 GB を超える場合に困難になることがあります。効率的な解決策として、次のアプローチを検討してください。
最初に、ファイルを最後までスキャンします。次に、体系的に後方に移動し、連続する 10 行の改行を検索します。見つかったら、さまざまな文字エンコーディングに注意しながら結論まで読み進めてください。
プロセスを適切に調整して、ファイルの行数が 10 行未満のシナリオに対処します。以下は 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); } }
このメソッドはファイル内の実際のトークン数に動的に調整するため、行数が異なるファイルに対して効果的です。
以上が大きなテキスト ファイルの最後の 10 行を効率的に読むにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。