【问题标题】:How to efficiently skip to a particular line in a file?如何有效地跳到文件中的特定行?
【发布时间】:2011-12-16 00:15:35
【问题描述】:

我知道我可以使用this function 逐行读取文件,然后我可以执行if($line_no < $X) continue; 之类的操作,但我想知道是否有更有效的方法?这些可能是我正在阅读的一些潜在的大文件,我不想把所有东西都塞进一个巨大的数组中,我将忽略其中的大部分。

【问题讨论】:

    标签: php performance file io


    【解决方案1】:

    PHP 不能仅使用行号跳转到特定行,而无需额外处理。如果您有 字节数 要跳过,您可以简单地使用 fseek()

    如果仅使用 file() 会导致内存不足,我无法帮助您,但您可以使用:

    $file = array_slice(file(__FILE__), __LINE__ - 1));
    

    在不添加任何不必要的内存的情况下获取所需行之后的行。即使在大文件上,这也应该相对较快。

    如果这还不够,您可能需要考虑使用其他语言。

    【讨论】:

    • 我会尝试这种方式......它可能不会成为问题,但它似乎很浪费。它所要做的就是分块读取文件并计算\n 的数量,而不是一次读取整个文件。
    • @Mark 我做了一个基准测试,使用fgets() 读取行与使用file()。就速度和内存使用而言,它们实际上是差不多的,所以我不知道你会从我向你展示的那一行代码复杂化中获得多少好处。
    猜你喜欢
    • 1970-01-01
    • 2010-10-11
    • 2015-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多