Effizientes Abrufen der letzten 10 Zeilen aus umfangreichen Textdateien
Bestimmen des effizientesten Ansatzes zum Extrahieren der letzten 10 Zeilen aus einem übermäßig großen Text Datei (über 10 GB) erfordert eine Strategie, die den Rechenaufwand minimiert Overhead.
Verwendung von Dateipositionierung und umgekehrter Suche
Der empfohlene Ansatz besteht darin, mit der Seek()-Methode zum Ende der Datei zu navigieren und sich in der Datei schrittweise rückwärts zu bewegen Datei, bis 10 Zeilenumbrüche auftreten. Durch die Beibehaltung einer Zeilenanzahl identifiziert die Methode den genauen Startpunkt zum Vorlesen und Abrufen der gewünschten Zeilen. Diese Strategie verarbeitet effizient Dateien mit einer unterschiedlichen Anzahl von Zeilen, einschließlich solcher mit weniger als 10.
Beispielimplementierung in C#
Der folgende C#-Code demonstriert die Implementierung von Der oben genannte Ansatz wird verallgemeinert, um die letzten numberOfTokens in einer durch Codierung codierten und durch getrennten Datei zu lokalisieren 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); } }
Durch die Verwendung dieser Technik wird das Abrufen der letzten 10 Zeilen aus einer großen Textdatei mit minimaler Speichernutzung und Rechenkomplexität erreicht, was eine effiziente Lösung für dieses häufige Dateiverarbeitungsszenario darstellt.
Das obige ist der detaillierte Inhalt vonWie kann ich die letzten 10 Zeilen aus einer sehr großen Textdatei effizient abrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!