Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Mengeluarkan 10 Baris Terakhir dengan Cekap daripada Fail Teks 10GB dalam C#?

Bagaimanakah Saya Boleh Mengeluarkan 10 Baris Terakhir dengan Cekap daripada Fail Teks 10GB dalam C#?

Susan Sarandon
Lepaskan: 2024-12-30 06:28:11
asal
169 orang telah melayarinya

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

Mendapatkan 10 Baris Terakhir Fail Teks Besar-besaran (Melebihi 10GB): Pendekatan C# yang Cekap

Apabila berurusan dengan fail teks besar yang melebihi 10GB, mengekstrak baris terakhir boleh menimbulkan cabaran prestasi. Begini cara untuk mencapai ini dengan berkesan menggunakan C#:

Pelaksanaan Kod:

Pendekatan umum ini membolehkan anda menentukan bilangan token untuk diekstrak (numberOfTokens), laluan fail (laluan), pengekodan (pengekodan), dan pemisah token (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);
    }
}
Salin selepas log masuk

Cara Ia Berfungsi:

  1. Kira saiz aksara dalam pengekodan yang ditentukan.
  2. Cari ke hujung fail dan mula bergerak ke belakang, membaca pemisah token bait.
  3. Kira token yang ditemui dan hentikan apabila bilangan token yang diingini dicapai.
  4. Baca baki bait dari kedudukan semasa hingga ke penghujung fail.
  5. Kendalikan kes di mana bilangan token dalam fail kurang daripada bilangan yang dijangkakan.

Oleh memanfaatkan pendekatan ini, anda boleh mengekstrak baris terakhir fail teks besar-besaran dengan cekap, menangani cabaran yang ditimbulkan oleh saiznya yang besar.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengeluarkan 10 Baris Terakhir dengan Cekap daripada Fail Teks 10GB dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan