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); } }
Comment ça marche :
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!