fseek () по строкам, а не по байтам?

У меня есть сценарий, который анализирует большие файлы построчно. Когда он обнаруживает ошибку, с которой он не может справиться, он останавливается, уведомляя нас о последней проанализированной строке.

Действительно ли это лучший / единственный способ найти определенную строку в файле? ( fseek () не может использоваться в моем случае.)

<?php

for ($i = 0; $i < 100000; $i++)
    fgets($fp); // just discard this

У меня нет проблем с его использованием, он достаточно быстрый - просто кажется немного грязным. Из того, что я знаю о базовом коде, я не Не думаю, что есть способ сделать это лучше.

18
задан jasonbar 27 August 2010 в 22:35
поделиться

2 ответа

Если я правильно понимаю, вы хотите перейти к определенной строке в какой-то момент после того, как нашли ошибку. Если это так, вы, вероятно, где-то храните или печатаете номер строки с ошибкой, в зависимости от того, что вы подразумеваете под «уведомлением».

Если вы на самом деле не имеете в виду, что вы не можете использовать fseek()*, вы можете также сохранить/распечатать позицию в файле, где начинается плохая строка. Затем вы можете fseek().

* Как в таком случае можно было бы использовать fseekbyline(), если бы она существовала?

0
ответ дан 30 November 2019 в 06:59
поделиться

Если у вас есть только номер строки для продолжения, нет другого способа найти линия. Файлы не основаны на строках (или даже на символах), поэтому нет возможности просто перейти к определенной строке в файле.

Могут быть другие способы чтения строк в файле, которые могут быть немного быстрее, например, чтение больших фрагментов файла в буфер и чтение строк из него, но вы можете только надеяться, что это будет на несколько процентов быстрее. . Любой метод поиска определенной строки в файле по-прежнему должен считывать все данные до этой строки.

4
ответ дан 30 November 2019 в 06:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: