У меня есть сценарий, который анализирует большие файлы построчно. Когда он обнаруживает ошибку, с которой он не может справиться, он останавливается, уведомляя нас о последней проанализированной строке.
Действительно ли это лучший / единственный способ найти определенную строку в файле? ( fseek ()
не может использоваться в моем случае.)
<?php
for ($i = 0; $i < 100000; $i++)
fgets($fp); // just discard this
У меня нет проблем с его использованием, он достаточно быстрый - просто кажется немного грязным. Из того, что я знаю о базовом коде, я не Не думаю, что есть способ сделать это лучше.
Если я правильно понимаю, вы хотите перейти к определенной строке в какой-то момент после того, как нашли ошибку. Если это так, вы, вероятно, где-то храните или печатаете номер строки с ошибкой, в зависимости от того, что вы подразумеваете под «уведомлением».
Если вы на самом деле не имеете в виду, что вы не можете использовать fseek()
*, вы можете также сохранить/распечатать позицию в файле, где начинается плохая строка. Затем вы можете fseek()
.
* Как в таком случае можно было бы использовать fseekbyline()
, если бы она существовала?
Если у вас есть только номер строки для продолжения, нет другого способа найти линия. Файлы не основаны на строках (или даже на символах), поэтому нет возможности просто перейти к определенной строке в файле.
Могут быть другие способы чтения строк в файле, которые могут быть немного быстрее, например, чтение больших фрагментов файла в буфер и чтение строк из него, но вы можете только надеяться, что это будет на несколько процентов быстрее. . Любой метод поиска определенной строки в файле по-прежнему должен считывать все данные до этой строки.