逐行读取大文件或将其行存储在数组中


Reading a large file line by line or storing its lines in an array

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

有两个函数你应该熟悉。

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

第二个是fgets(),您可以使用它一次一行地读取文件。只要有更多行需要处理,就可以使用此方法循环,并在循环中运行行处理。你需要使用fopen()来获得这个文件的句柄,你可能想要跟踪文件指针自己恢复管理(即,这样你就不必从头开始处理,如果有些事情走到一边,脚本失败),等等。

希望这足以让你开始。

两者结合如何?读取1000行到数组中,处理它,删除数组,然后再读取1000行,等等。监视内存使用情况并调整一次读入数组的数量。