Heim > Backend-Entwicklung > C++ > Wie liest man die letzten 10 Zeilen einer großen Textdatei effizient?

Wie liest man die letzten 10 Zeilen einer großen Textdatei effizient?

Susan Sarandon
Freigeben: 2024-12-30 21:03:16
Original
908 Leute haben es durchsucht

How to Efficiently Read the Last 10 Lines of a Large Text File?

So rufen Sie effizient die letzten 10 Zeilen aus umfangreichen Textdateien (> 10 GB) ab

Anzeige der letzten 10 Zeilen einer umfangreichen Datei Das Erstellen einer Textdatei kann eine Herausforderung sein, insbesondere wenn die Datei größer als 10 Gigabyte ist. Erwägen Sie für eine effiziente Lösung den folgenden Ansatz:

Durchlaufen Sie die Datei zunächst bis zum Ende. Gehen Sie als nächstes systematisch zurück und suchen Sie nach 10 aufeinanderfolgenden Zeilenumbrüchen. Sobald Sie es gefunden haben, lesen Sie bis zum Schluss weiter und achten Sie dabei auf unterschiedliche Zeichenkodierungen.

Behandeln Sie Szenarien, in denen die Datei weniger als 10 Zeilen enthält, indem Sie den Prozess entsprechend anpassen. Unten ist eine Implementierung in C#:

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 the case where the file has fewer than numberOfTokens lines
        fs.Seek(0, SeekOrigin.Begin);
        buffer = new byte[fs.Length];
        fs.Read(buffer, 0, buffer.Length);
        return encoding.GetString(buffer);
    }
}
Nach dem Login kopieren

Diese Methode passt sich dynamisch an die tatsächliche Anzahl der Token in der Datei an und ist somit für Dateien mit unterschiedlichen Zeilenzahlen wirksam.

Das obige ist der detaillierte Inhalt vonWie liest man die letzten 10 Zeilen einer großen Textdatei effizient?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage