Récupération des 10 dernières lignes de fichiers texte massifs (plus de 10 Go)
Dans le domaine du traitement de texte, un défi courant consiste à extraire le dernières lignes de fichiers texte extrêmement volumineux. Lorsqu’il s’agit de fichiers dépassant 10 Go, les approches traditionnelles peuvent s’avérer insuffisantes. Cet article présente une solution efficace à ce problème en utilisant C# et propose un extrait de code pour démontrer sa mise en œuvre.
Pour récupérer efficacement les 10 dernières lignes, la stratégie consiste à parcourir le fichier en arrière depuis la fin. Comme le nombre de lignes peut être variable, nous recherchons itérativement en arrière jusqu'à ce que 10 sauts de ligne soient rencontrés. Une fois ce point atteint, nous lisons le contenu restant pour capturer les 10 dernières lignes.
Considérons l'implémentation suivante :
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); } }
Ce code gère les cas où le nombre de lignes dans le Le fichier est inférieur à 10 et ajuste de manière appropriée l’opération de lecture. Le paramètre encoding permet une personnalisation en fonction de l'encodage du fichier, et tokenSeparator peut être utilisé pour récupérer les derniers éléments consécutifs d'un séparateur différent.
En utilisant cette approche, vous pouvez récupérer efficacement les 10 dernières lignes d'un texte massif. fichiers, garantissant un traitement efficace et des résultats précis.
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!