Abrufen der letzten 10 Zeilen umfangreicher Textdateien (über 10 GB)
Im Bereich der Textverarbeitung besteht eine häufige Herausforderung darin, die zu extrahieren letzten paar Zeilen extrem großer Textdateien. Beim Umgang mit Dateien mit mehr als 10 GB können herkömmliche Ansätze nicht ausreichen. Dieser Artikel stellt eine effektive Lösung für dieses Problem mit C# vor und bietet einen Codeausschnitt zur Demonstration der Implementierung.
Um die letzten 10 Zeilen effizient abzurufen, besteht die Strategie darin, die Datei vom Ende rückwärts zu durchlaufen. Da die Anzahl der Zeilen variabel sein kann, suchen wir iterativ rückwärts, bis wir auf 10 Zeilenumbrüche stoßen. Sobald dieser Punkt erreicht ist, lesen wir den verbleibenden Inhalt weiter, um die letzten 10 Zeilen zu erfassen.
Betrachten Sie die folgende Implementierung:
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); } }
Dieser Code behandelt Fälle, in denen die Anzahl der Zeilen im Datei ist kleiner als 10 und passt den Lesevorgang entsprechend an. Der Kodierungsparameter ermöglicht eine Anpassung basierend auf der Kodierung der Datei, und tokenSeparator kann verwendet werden, um die letzten aufeinanderfolgenden Elemente eines anderen Trennzeichens abzurufen.
Mit diesem Ansatz können Sie effektiv die letzten 10 Zeilen umfangreichen Texts abrufen Dateien, wodurch eine effiziente Verarbeitung und genaue Ergebnisse gewährleistet werden.
Das obige ist der detaillierte Inhalt vonWie lese ich die letzten 10 Zeilen einer 10-GB-Textdatei in C# effizient?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!