| |
|
|
| | Какие есть варианты для этого? Просто бежать циклом по файлу уже невозможно... файл большеват.
Взять все сразу в память тоже нельзя. По той же причине... memory_limit 512M не хватает... | |
| |
|
|
| |
|
|
| |
для: Shorr Kan
(07.03.2007 в 07:42)
| | | читает по строкам | |
| |
|
|
| |
|
|
| |
для: Sl
(07.03.2007 в 07:49)
| | | > читает по строкам
В цикле. :-\
Если файл оптимизировать под одинаковую длинну строк, то можно воспользоваться функциями fseek - установка позиции курсора в определённое место, затем fgets c указанием длинны строки. Будет считана строка с определённого места.
Зная длину строки можно рассчитать необходимую позицию для считывания. | |
| |
|
|
| |
|
|
| |
для: tuder
(07.03.2007 в 09:00)
| | | ну так при нахождении нужной строки из цикла можно выйти... | |
| |
|
|
| |
|
|
| |
для: KPETuH
(07.03.2007 в 09:02)
| | | > Просто бежать циклом по файлу уже невозможно... файл большеват.
А если строка ближе к концу файла?
Сразу написали, что не подходит вариант. | |
| |
|
|
| |
|
|
| |
для: tuder
(07.03.2007 в 09:05)
| | | ну насколько я вижу других возможностей нету или открывай полностью или перебор циклом | |
| |
|
|
| |
|
|
| |
для: KPETuH
(07.03.2007 в 09:13)
| | | Странный человек. Я же только что расписал такую возможность.
Смотри сам.
Вот поиграй параметром в пределах от 1 до 26173
http://files.byte.nsk.su/test/string.php?n=21245
Вот сам файл размером 1.2Мб
http://files.byte.nsk.su/test/oleg.txt
<?php
$fp=fopen("oleg.txt", "r");
echo "Jump to $n<br>";
$part_time = explode(' ', microtime());
$begin_time = $part_time[1].substr($part_time[0],1);
fseek($fp, $n*45, SEEK_SET);
$s=fgets($fp);
echo $s;
$part_time = explode(' ', microtime());
$end_time = $part_time[1].substr($part_time[0],1);
$time=sprintf("%1.6f",$end_time - $begin_time);
echo "<p>Seek: $time sec</p>";
fclose($fp);
echo "Cycle to $n<br>";
$fp=fopen("oleg.txt", "r");
$part_time = explode(' ', microtime());
$begin_time = $part_time[1].substr($part_time[0],1);
for ($i=0; $i<=$n; $i++) {
$s=fgets($fp);
}
echo $s;
$part_time = explode(' ', microtime());
$end_time = $part_time[1].substr($part_time[0],1);
$time=sprintf("%1.6f",$end_time - $begin_time);
echo "<p>Seek: $time sec</p>";
fclose($fp);
?>
|
| |
| |
|
|
| |
|
|
| |
для: Shorr Kan
(07.03.2007 в 07:42)
| | | Создать индексный файл. С записями фиксированной длины, представляющий собой массив позиций исходного. | |
| |
|
|