大規模なテキスト ファイル (10 GB 以上) の最後の 10 行を取得する
テキスト処理の分野では、共通の課題は、非常に大きなテキスト ファイルの最後の数行。 10 GB を超えるファイルを扱う場合、従来のアプローチでは不十分な場合があります。この記事では、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# で 10 GB のテキスト ファイルの最後の 10 行を効率的に読み取る方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。