Maison > développement back-end > C++ > Comment lire efficacement les 10 dernières lignes d'un fichier texte de 10 Go en C# ?

Comment lire efficacement les 10 dernières lignes d'un fichier texte de 10 Go en C# ?

Patricia Arquette
Libérer: 2024-12-29 02:03:09
original
439 Les gens l'ont consulté

How to Efficiently Read the Last 10 Lines of a 10GB  Text File in C#?

Récupération des 10 dernières lignes de fichiers texte massifs (plus de 10 Go)

Dans le domaine du traitement de texte, un défi courant consiste à extraire le dernières lignes de fichiers texte extrêmement volumineux. Lorsqu’il s’agit de fichiers dépassant 10 Go, les approches traditionnelles peuvent s’avérer insuffisantes. Cet article présente une solution efficace à ce problème en utilisant C# et propose un extrait de code pour démontrer sa mise en œuvre.

Pour récupérer efficacement les 10 dernières lignes, la stratégie consiste à parcourir le fichier en arrière depuis la fin. Comme le nombre de lignes peut être variable, nous recherchons itérativement en arrière jusqu'à ce que 10 sauts de ligne soient rencontrés. Une fois ce point atteint, nous lisons le contenu restant pour capturer les 10 dernières lignes.

Considérons l'implémentation suivante :

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);
    }
}
Copier après la connexion

Ce code gère les cas où le nombre de lignes dans le Le fichier est inférieur à 10 et ajuste de manière appropriée l’opération de lecture. Le paramètre encoding permet une personnalisation en fonction de l'encodage du fichier, et tokenSeparator peut être utilisé pour récupérer les derniers éléments consécutifs d'un séparateur différent.

En utilisant cette approche, vous pouvez récupérer efficacement les 10 dernières lignes d'un texte massif. fichiers, garantissant un traitement efficace et des résultats précis.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal