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

Comment lire efficacement les 10 dernières lignes d'un gros fichier texte ?

Susan Sarandon
Libérer: 2024-12-30 21:03:16
original
909 Les gens l'ont consulté

How to Efficiently Read the Last 10 Lines of a Large Text File?

Comment récupérer efficacement les 10 dernières lignes d'un fichier texte massif (> 10 Go)

Affichage des 10 dernières lignes d'un texte étendu fichier texte peut être difficile, surtout lorsque la taille du fichier dépasse 10 gigaoctets. Pour une solution efficace, envisagez l'approche suivante :

Dans un premier temps, parcourez le fichier jusqu'à sa fin. Ensuite, reculez systématiquement en recherchant 10 nouvelles lignes consécutives. Une fois trouvé, lisez avec impatience la conclusion, en faisant attention aux différents encodages de caractères.

Gérez les scénarios dans lesquels le fichier comporte moins de 10 lignes en ajustant le processus de manière appropriée. Vous trouverez ci-dessous une implémentation en C# :

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 the case where the file has fewer than numberOfTokens lines
        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

Cette méthode s'ajuste dynamiquement au nombre réel de jetons dans le fichier, ce qui la rend efficace pour les fichiers avec un nombre de lignes variable.

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