ホームページ > バックエンド開発 > C++ > 大きなテキスト ファイルの最後の 10 行を効率的に読むにはどうすればよいですか?

大きなテキスト ファイルの最後の 10 行を効率的に読むにはどうすればよいですか?

Susan Sarandon
リリース: 2024-12-30 21:03:16
オリジナル
908 人が閲覧しました

How to Efficiently Read the Last 10 Lines of a Large Text File?

大規模なテキスト ファイル (> 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート