Heim >Backend-Entwicklung >C++ >Wie kann ich die letzten 10 Zeilen einer riesigen Textdatei effizient abrufen?
Im Bereich der umfangreichen Textverarbeitung stellt das Abrufen der letzten Zeilen einer außergewöhnlich großen Datei eine Herausforderung dar einzigartige Herausforderung. Eine solche Datei mit einer Größe von mehr als 10 GB stellt eine erhebliche Hürde bei der effizienten Beschaffung dieser Daten dar.
Um dieses Problem zu lösen, besteht ein effektiver Ansatz darin, die Datei rückwärts zu durchlaufen, beginnend am Ende. Unser Ziel ist es, zehn aufeinanderfolgende Zeilenumbrüche zu finden, die das Vorhandensein der gewünschten Zeilen anzeigen. Anschließend lesen wir weiter, um diese Zeilen zu erfassen und dabei mögliche Codierungsvarianten zu berücksichtigen.
In C# beispielsweise behandelt eine umfassende Implementierung Fälle, in denen die Datei weniger als zehn Zeilen enthält. Der folgende Codeausschnitt veranschaulicht diesen Ansatz:
public static string ReadEndLines(string path, Int64 numberOfLines, Encoding encoding, string lineSeparator) { int sizeOfChar = encoding.GetByteCount("\n"); byte[] buffer = encoding.GetBytes(lineSeparator); using (FileStream fs = new FileStream(path, FileMode.Open)) { Int64 lineCount = 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) == lineSeparator) { lineCount++; if (lineCount == numberOfLines) { byte[] returnBuffer = new byte[fs.Length - fs.Position]; fs.Read(returnBuffer, 0, returnBuffer.Length); return encoding.GetString(returnBuffer); } } } // handle case where number of lines in file is less than numberOfLines fs.Seek(0, SeekOrigin.Begin); buffer = new byte[fs.Length]; fs.Read(buffer, 0, buffer.Length); return encoding.GetString(buffer); } }
Das obige ist der detaillierte Inhalt vonWie kann ich die letzten 10 Zeilen einer riesigen Textdatei effizient abrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!