Heim > Backend-Entwicklung > C++ > Wie lese ich die letzten 10 Zeilen einer 10-GB-Textdatei in C# effizient?

Wie lese ich die letzten 10 Zeilen einer 10-GB-Textdatei in C# effizient?

Patricia Arquette
Freigeben: 2024-12-29 02:03:09
Original
439 Leute haben es durchsucht

How to Efficiently Read the Last 10 Lines of a 10GB  Text File in C#?

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);
    }
}
Nach dem Login kopieren

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!

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