Rumah > pembangunan bahagian belakang > C++ > Bagaimana Cara Membaca 10 Baris Terakhir Fail Teks Besar dengan Cekap?

Bagaimana Cara Membaca 10 Baris Terakhir Fail Teks Besar dengan Cekap?

Susan Sarandon
Lepaskan: 2024-12-30 21:03:16
asal
908 orang telah melayarinya

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

Cara Mendapatkan Kembali 10 Baris Terakhir dari Fail Teks Besar-besaran dengan Cekap (> 10 GB)

Memaparkan 10 baris terakhir yang luas fail teks boleh mencabar, terutamanya apabila saiz fail melebihi 10 gigabait. Untuk penyelesaian yang cekap, pertimbangkan pendekatan berikut:

Pada mulanya, lintasi fail ke hujungnya. Seterusnya, bergerak ke belakang secara sistematik, mencari 10 baris baharu berturut-turut. Setelah ditemui, baca ke hadapan hingga kesimpulan, memberi perhatian kepada pengekodan aksara yang berbeza.

Kendalikan senario di mana fail mempunyai kurang daripada 10 baris dengan melaraskan proses dengan sewajarnya. Di bawah ialah pelaksanaan dalam 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);
    }
}
Salin selepas log masuk

Kaedah ini melaraskan secara dinamik kepada bilangan token sebenar dalam fail, menjadikannya berkesan untuk fail dengan bilangan baris yang berbeza-beza.

Atas ialah kandungan terperinci Bagaimana Cara Membaca 10 Baris Terakhir Fail Teks Besar dengan Cekap?. 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