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

Wie kann ich die letzten 10 Zeilen effizient aus einer 10-GB-Textdatei in C# extrahieren?

Susan Sarandon
Freigeben: 2024-12-30 06:28:11
Original
169 Leute haben es durchsucht

How Can I Efficiently Extract the Last 10 Lines from a 10GB  Text File in C#?

Die letzten 10 Zeilen einer riesigen Textdatei (über 10 GB) abrufen: Ein effizienter C#-Ansatz

Beim Umgang mit riesigen Textdateien von mehr als 10 GB, das Extrahieren der letzten Zeilen kann eine Leistungsherausforderung darstellen. So erreichen Sie dies effektiv mit C#:

Code-Implementierung:

Mit diesem allgemeinen Ansatz können Sie die Anzahl der zu extrahierenden Token (numberOfTokens) und den Dateipfad angeben (Pfad), die Kodierung (Kodierung) und das Token-Trennzeichen (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);
    }
}
Nach dem Login kopieren

So funktioniert es:

  1. Berechnen Sie die Größe eines Zeichens in der angegebenen Kodierung.
  2. Suchen Gehen Sie zum Ende der Datei und bewegen Sie sich rückwärts, indem Sie die Token-Trennbytes lesen.
  3. Zählen Sie die gefundenen Token und stoppen, wenn die gewünschte Anzahl von Token erreicht ist.
  4. Lesen Sie die verbleibenden Bytes von der aktuellen Position bis zum Ende der Datei.
  5. Behandeln Sie den Fall, bei dem die Anzahl der Token in der Datei beträgt weniger als die erwartete Anzahl.

Durch die Nutzung dieses Ansatzes können Sie die letzten Zeilen umfangreicher Textdateien effizient extrahieren und so die Herausforderungen meistern, die sich aus ihnen ergeben Größe.

Das obige ist der detaillierte Inhalt vonWie kann ich die letzten 10 Zeilen effizient aus einer 10-GB-Textdatei in C# extrahieren?. 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