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

Comment puis-je extraire efficacement les 10 dernières lignes d'un fichier texte de 10 Go en C# ?

Susan Sarandon
Libérer: 2024-12-30 06:28:11
original
173 Les gens l'ont consulté

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

Obtention des 10 dernières lignes d'un fichier texte massif (plus de 10 Go) : une approche C# efficace

Lorsque vous traitez des fichiers texte volumineux dépassant 10 Go, l'extraction des dernières lignes peut poser un problème de performances. Voici comment y parvenir efficacement en utilisant C# :

Implémentation du code :

Cette approche généralisée vous permet de spécifier le nombre de jetons à extraire (numberOfTokens), le chemin du fichier (chemin), l'encodage (encodage) et le séparateur de jetons (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);
    }
}
Copier après la connexion

Comment ça marche :

  1. Calculer la taille d'un caractère dans l'encodage spécifié.
  2. Rechercher jusqu'à la fin du fichier et commencez à reculer, en lisant les octets du séparateur de jetons.
  3. Comptez les jetons rencontrés et s'arrêter lorsque le nombre souhaité de jetons est atteint.
  4. Lire les octets restants de la position actuelle jusqu'à la fin du fichier.
  5. Gérer le cas où le nombre de jetons dans le fichier est inférieur que le nombre attendu.

En tirant parti de cette approche, vous pouvez extraire efficacement les dernières lignes de fichiers texte volumineux, en relevant les défis posés par leur grande taille. taille.

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