Récupération efficace des 10 dernières lignes à partir de fichiers texte massifs
Détermination de l'approche la plus efficace pour extraire les 10 dernières lignes d'un texte extrêmement volumineux fichier (dépassant 10 Go) nécessite une stratégie qui minimise les calculs surcharge.
Utilisation du positionnement de fichier et de la recherche inversée
L'approche recommandée consiste à naviguer jusqu'à la fin du fichier à l'aide de la méthode Seek() et à reculer progressivement dans le fichier jusqu’à rencontrer 10 nouvelles lignes. En maintenant un nombre de lignes, la méthode identifie le point de départ précis pour lire vers l'avant et récupérer les lignes souhaitées. Cette stratégie gère efficacement les fichiers comportant un nombre variable de lignes, y compris ceux comportant moins de 10.
Exemple d'implémentation en C#
Le code C# suivant illustre l'implémentation de approche précitée, généralisée pour localiser le dernier numberOfTokens dans un fichier codé par encodage et séparé par 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); } }
En utilisant cette technique, la récupération des 10 dernières lignes d'un gros fichier texte est réalisée avec une utilisation de mémoire et une complexité de calcul minimales, offrant une solution efficace pour ce scénario de traitement de fichiers courant.
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!