【问题标题】:Reading a large file line by line or storing its lines in an array逐行读取大文件或将其行存储在数组中
【发布时间】:2011-12-04 04:45:07
【问题描述】:

我有一个大文件,100,000 行。我可以读取每一行并处理它,或者我可以将这些行存储在一个数组中然后处理它们。我更愿意将数组用于额外的功能,但我真的很担心与在数组中存储这么多行相关的内存使用情况,以及是否值得。

【问题讨论】:

  • 您是否只需要执行一次,还是会有许多并发的 Web 用户触发此操作?如果很多,为什么不将文件的内容存储到数据库中?
  • 您可以使用SplFileObject 获得对文本行的类似数组的访问(一个迭代器)。
  • 您可能还没有找到更好的方法来解决您的问题。您很少需要在内存中同时打开所有 100 000 行。想想其他方法来做到这一点,你现有的计划会出现性能问题。
  • @Michael 如果我把它放到一个数据库里,我还是得把它们都从数据库中拉出来一个一个地处理,我不想单独调用来获取它们 1 1,所以我们回到同一个问题。我会将它们中的许多放在某种对象中。

标签: php arrays file


【解决方案1】:

您应该熟悉两个功能。

第一个是file(),它将整个文件读入一个数组,每一行作为一个数组元素。这对于较短的文件很有用,并且可能不是您想要在 100k 行文件上使用的文件。此函数处理自己的文件管理,因此您无需自己显式打开和关闭文件。

第二个是fgets(),您可以使用它一次读取一行文件。只要有更多行要处理,您就可以使用它来循环,并在循环内运行您的行处理。您需要使用fopen() 来获取此文件的句柄,您可能希望自己跟踪文件指针以进行恢复管理(即,如果出现问题并且脚本失败,您不必从头开始重新开始处理) 等。

希望这足以让您入门。

【讨论】:

    【解决方案2】:

    两者结合怎么样?将 1000 行读入数组,对其进行处理,删除数组,然后再读取 1000 行,等等。监控内存使用情况并调整一次读入数组的数量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-13
      • 1970-01-01
      • 1970-01-01
      • 2013-01-26
      • 1970-01-01
      • 1970-01-01
      • 2020-02-09
      • 2014-10-16
      相关资源
      最近更新 更多