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

C# で 10 GB のテキスト ファイルから最後の 10 行を効率的に抽出するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-12-30 06:28:11
オリジナル
174 人が閲覧しました

How Can I Efficiently Extract the Last 10 Lines from a 10GB  Text File in C#?

大規模なテキスト ファイル (10 GB 以上) の最後の 10 行を取得する: 効率的な C# アプローチ

10 GB を超える大規模なテキスト ファイルを扱う場合10GB の場合、最後の行を抽出するとパフォーマンスに問題が生じる可能性があります。 C# を使用してこれを効果的に実現する方法は次のとおりです:

コードの実装:

この一般化されたアプローチにより、抽出するトークンの数 (numberOfTokens)、ファイル パスを指定できます。 (パス)、エンコーディング (encoding)、およびトークン区切り文字(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);
    }
}
ログイン後にコピー

仕組み:

  1. 指定されたエンコーディングでの文字のサイズを計算します。
  2. シークファイルの最後まで移動し、トークン区切り文字を読み取りながら逆方向に移動し始めます。バイト。
  3. 発生したトークンをカウントし、必要なトークン数に達すると停止します。
  4. 現在の位置からファイルの終わりまで残りのバイトを読み取ります。
  5. ファイル内のトークンの数が予想される数より少ない場合に対処します。

これを利用することでこのアプローチを使用すると、巨大なテキスト ファイルの最後の行を効率的に抽出し、ファイルのサイズが大きいために生じる課題に対処できます。

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

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