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

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

Mary-Kate Olsen
リリース: 2025-01-05 10:23:41
オリジナル
445 人が閲覧しました

How Can I Efficiently Retrieve the Last 10 Lines of a Gigantic Text File?

大規模なテキスト ファイルの最後の 10 行を効率的に取得する

大規模なテキスト処理の領域では、非常に大きなファイルの最後の行を取得すると、ユニークな挑戦。このようなファイルの 1 つは、サイズが 10GB を超えており、このデータを効率的に取得する上で大きな障害となります。

この問題に取り組むための効果的なアプローチは、ファイルを最後から逆方向に走査することです。目的の行の存在を示す、10 個の連続する改行を見つけ出すことを目指します。その後、潜在的なエンコードのバリエーションを考慮して、これらの行をキャプチャするために前方に読み上げます。

たとえば、C# では、ファイルに含まれる行が 10 行未満の場合は、包括的な実装によって処理されます。次のコード スニペットは、このアプローチの例を示しています:

public static string ReadEndLines(string path, Int64 numberOfLines, Encoding encoding, string lineSeparator) {

    int sizeOfChar = encoding.GetByteCount("\n");
    byte[] buffer = encoding.GetBytes(lineSeparator);


    using (FileStream fs = new FileStream(path, FileMode.Open)) {
        Int64 lineCount = 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) == lineSeparator) {
                lineCount++;
                if (lineCount == numberOfLines) {
                    byte[] returnBuffer = new byte[fs.Length - fs.Position];
                    fs.Read(returnBuffer, 0, returnBuffer.Length);
                    return encoding.GetString(returnBuffer);
                }
            }
        }

        // handle case where number of lines in file is less than numberOfLines
        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 までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート