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

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

Barbara Streisand
リリース: 2024-12-29 10:20:11
オリジナル
245 人が閲覧しました

How Can I Efficiently Retrieve the Last 10 Lines from a Very Large Text File?

大規模なテキスト ファイルからの最後の 10 行の効率的な取得

非常に大きなテキストから最後の 10 行を抽出するための最も効率的なアプローチの決定ファイル (10 GB を超える) には、計算量を最小限に抑える戦略が必要です

ファイルの位置決めと逆シークの利用

推奨されるアプローチは、Seek() メソッドを使用してファイルの末尾に移動し、ファイル内で徐々に後方に移動することです。 10 個の改行が見つかるまでファイルを保存します。このメソッドは、行数を維持することにより、前方に読み取って目的の行を取得するための正確な開始点を特定します。この戦略は、行数が異なるファイル (10 未満のファイルも含む) を効率的に処理します。

C# での実装例

次の C# コードは、前述のアプローチは、エンコーディングによってエンコードされ、次のように区切られたファイル内の最後のnumberOfTokensを見つけるために一般化されています。 tokenSeparator:

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 行の取得が最小限のメモリ使用量と計算の複雑さで実現され、この一般的なファイル処理シナリオに効率的なソリューションが提供されます。

以上が非常に大きなテキスト ファイルから最後の 10 行を効率的に取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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