SystemKiller
Новичок
Есть у нас файл text.txt, его содержание такое:
Возможно ли управлять курсором? Т.е. вернуться на предудыщую строку?
У меня есть вариант как это сделать, но мне он не нравится - т.к. скажется на быстродействии, если в файле очень очень много строк будет, а идея такова:
Неужели в PHP не предусмотрено функции управления курсором строки?
Т.е. если fgets() передвигает курсор на след. строку, то мне нужна такая-же функция, передвигающая курсор на предыдущую строку, либо на строку, номер которой можно указать в функции.
Подскажите, пожалуйста. Вроде бы обьяснил максимально понятно, чего мне нужно.
P.S. Знаю, что можно просто открыть файл вот так - $file=file("text.txt"); и легко получать любую строку, номер которой можно указать. (echo($file[4]);).
Этот вариант удобен. Но представьте, если в файле миллион строк? А если ещё больше?
PHP будет в память загружать такой большой массив(если будет - не проверял) - это скажется на быстродействии...
А если построчно файл читать - то пофигу сколько строк, т.к. в память загружается только по одной строке. Тут ограничение только по максимальному кол-ву времени выполнения скрипта.
Мы его открываем и читаем построчно:Первая строка
Вторая строка
Третья строка
Четвертая строка
Пятая строка
Шестая строка
Седьмая строка
Восьмая строка
Девятая строка
Десятая строка
PHP:
$file=fopen("text.txt","r");
while( !feof($file) )
{
$str=fgets($file,1024);
if( strpos($str,"Шестая строка")!==false )
{
echo('Вот тут я хочу вернуться на предыдущую строку, т.е. на пятую. Как это сделать?');
}
}
У меня есть вариант как это сделать, но мне он не нравится - т.к. скажется на быстродействии, если в файле очень очень много строк будет, а идея такова:
А вот её код:Если найдено совпадение, закрываем файл и открываем заново (курсор устанавливается на начало файла) и в цикле вызываем команду fgets($file,0) такое кол-во раз, на какую строку нужно перейти
PHP:
$file=fopen("text.txt","r");
$a=0;
while( !feof($file) )
{
$a++;
$str=fgets($file,1024);
if( strpos($str,"Шестая строка")!==false )
{
fclose($file);
$file=fopen("text.txt","r");
for($i=0;$i<$a;$i++)
{
fgets($file,0);
}
break;
}
}
Т.е. если fgets() передвигает курсор на след. строку, то мне нужна такая-же функция, передвигающая курсор на предыдущую строку, либо на строку, номер которой можно указать в функции.
Подскажите, пожалуйста. Вроде бы обьяснил максимально понятно, чего мне нужно.
P.S. Знаю, что можно просто открыть файл вот так - $file=file("text.txt"); и легко получать любую строку, номер которой можно указать. (echo($file[4]);).
Этот вариант удобен. Но представьте, если в файле миллион строк? А если ещё больше?
PHP будет в память загружать такой большой массив(если будет - не проверял) - это скажется на быстродействии...
А если построчно файл читать - то пофигу сколько строк, т.к. в память загружается только по одной строке. Тут ограничение только по максимальному кол-ву времени выполнения скрипта.