首页 > 后端开发 > C++ > 如何高效读取大文本文件的最后10行?

如何高效读取大文本文件的最后10行?

Susan Sarandon
发布: 2024-12-30 21:03:16
原创
908 人浏览过

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

如何高效地从海量文本文件(> 10 GB)中检索最后 10 行

显示大量文本文件的最后 10 行文本文件可能具有挑战性,尤其是当文件大小超过 10 GB 时。要获得有效的解决方案,请考虑以下方法:

首先,遍历文件到末尾。接下来,系统地向后移动,搜索 10 个连续的换行符。找到后,继续阅读结论,注意不同的字符编码。

通过适当调整流程来处理文件少于 10 行的场景。下面是 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);
    }
}
登录后复制

此方法会动态调整文件中的实际标记数量,使其对具有不同行数的文件有效。

以上是如何高效读取大文本文件的最后10行?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板