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); } }
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!