|
|
|
| Подскажите как считать с текстового файла последних десять строчек если если файл записан таким образом:
ххх::ххх::ххх::ххх::ххх::
ххх::ххх::ххх::ххх::ххх::
ххх::ххх::ххх::ххх::ххх::
и так далее
и можна ли отсортировать данные по количеству хитов тоесть от большего к меньшему если запись ведётся :
$data,$name.$xit
ххх::ххх::54::
ххх::ххх::766::
и так далее | |
|
|
|
|
|
|
|
для: Webmaster-X
(20.07.2006 в 16:57)
| | Можно извлечь последние 10 строчек следующим образом (если файл не очень большой и не занимает несклько мегабайт):
<?php
$arr = file("text.txt");
// Выводим посление 10 строк
for($i = count($arr) - 10; $i < count($arr); $i++) echo $arr[$i]."<br>";
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(20.07.2006 в 17:07)
| | А можна вывести по хитам? | |
|
|
|
|
|
|
|
для: Webmaster-X
(20.07.2006 в 22:07)
| | Следует поступить примерно так
<?php
$arr = file("text.txt");
// Формируем массив
$lines = array();
for($i = 0; $i < count($arr); $i++)
{
if(!empty($arr[$i]))
{
$tmp = explode($arr[$i]);
$lines[$arr[$i]] = $tmp[2];
echo $arr[$i]."<br>";
}
}
// Сортируем по хитам
arsort($lines);
// Выводим посление 10 строк
$i = 0;
foreach($lines as $key => $value)
{
if($i > 0) break;
echo $key."<br>";
}
?>
|
PS Но у меня к сожалению нет файла данных, чтобы проверить его работоспособность. | |
|
|
|
|
|
|
|
для: cheops
(21.07.2006 в 10:11)
| | С считкой последних 10 строк всё замечательно работает я спецально загнал 47 мегабайт (16416 строк) и проверил-сбоев нет.
спасибо.
а по хитам щас проверю | |
|
|
|
|
|
|
|
для: Webmaster-X
(21.07.2006 в 11:24)
| | вид text.txt
d::s::з::34::
d::s::г::456::
d::s::d::56::
d::s::s::123::
d::s::sff::786::
d::s::sf::23::
d::s::df::12::
d::s::sd::3546::
d::s::f::878::
d::s::s::35::
d::s::п::87::
d::s::и::98::
d::s::df::453::
|
я считую данные
$f=file("./text.txt");
for($i=0;$i<count($f);$i++){
list($check,$rdate,$rauthor,$count)=split("::",$f[$i]);
}
|
$count - надо отсортировать
но чтото у меня не получается | |
|
|
|
|
|
|
|
для: Webmaster-X
(21.07.2006 в 11:24)
| | 47 мегабайт? Ну-ну... | |
|
|
|
|
|
|
|
для: Trianon
(21.07.2006 в 12:42)
| | >47 мегабайт? Ну-ну...
а что странного?
я открыл в ручную копировал и вставлял
токо вместо txt я использую DAT | |
|
|
|
|
|
|
|
для: Webmaster-X
(21.07.2006 в 12:59)
| | Странно, что у Вас php по "Out of memory" не загнулся. На операции =file("47Mb.txt") | |
|
|
|
|
|
|
|
для: Trianon
(21.07.2006 в 13:21)
| | я ж не всё считываю а всего 10 строк
а если всё ставил
set_time_limit(0);
и счал всё правда вес страницы был ужасный | |
|
|
|
|
|
|
|
для: Webmaster-X
(21.07.2006 в 13:26)
| | Ошибаетесь. Выводите Вы 10 строк. А считываете - всё. | |
|
|
|
|
|
|
|
для: Webmaster-X
(21.07.2006 в 13:26)
| | Trianon хочет сказать, что на хостинге под UNIX с настроенным PHP - это не пройдёт, там под весь скрипт отводится 8, реже 16 мегабайт и работать с такими большими файлами потребуется другими методами, например, связкой функций fopen() + fgets(). | |
|
|
|
|
|
|
|
для: cheops
(21.07.2006 в 23:33)
| | а можна не большой пример | |
|
|
|
|
|
|
|
для: Webmaster-X
(21.09.2006 в 23:07)
| | Можно
<?php
// Открываем файл
$fd = fopen("text.txt", "r");
if($fd)
{
// Построчно читаем файл, пока не встретится
// конец файла
while(!feof($fd))
{
// Читаем текущую строку
$str = fgets($fd, 10000);
}
// Закрываем файл
fclose($fd);
}
?>
|
На каждой итерации цикла читается текущая строка файла $str, при этом в каждый момент времени строка только одна и память соответственно резервируется только для этой строки. | |
|
|
|