Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Считка данных с текстового файла
 
 автор: Webmaster-X   (20.07.2006 в 16:57)   письмо автору
 
 

Подскажите как считать с текстового файла последних десять строчек если если файл записан таким образом:

ххх::ххх::ххх::ххх::ххх::
ххх::ххх::ххх::ххх::ххх::
ххх::ххх::ххх::ххх::ххх::
и так далее
и можна ли отсортировать данные по количеству хитов тоесть от большего к меньшему если запись ведётся :
$data,$name.$xit
ххх::ххх::54::
ххх::ххх::766::
и так далее

   
 
 автор: cheops   (20.07.2006 в 17:07)   письмо автору
 
   для: 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>";
?>

   
 
 автор: Webmaster-X   (20.07.2006 в 22:07)   письмо автору
 
   для: cheops   (20.07.2006 в 17:07)
 

А можна вывести по хитам?

   
 
 автор: cheops   (21.07.2006 в 10:11)   письмо автору
 
   для: 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 Но у меня к сожалению нет файла данных, чтобы проверить его работоспособность.

   
 
 автор: Webmaster-X   (21.07.2006 в 11:24)   письмо автору
 
   для: cheops   (21.07.2006 в 10:11)
 

С считкой последних 10 строк всё замечательно работает я спецально загнал 47 мегабайт (16416 строк) и проверил-сбоев нет.
спасибо.
а по хитам щас проверю

   
 
 автор: Webmaster-X   (21.07.2006 в 11:52)   письмо автору
 
   для: 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 - надо отсортировать
но чтото у меня не получается

   
 
 автор: Trianon   (21.07.2006 в 12:42)   письмо автору
 
   для: Webmaster-X   (21.07.2006 в 11:24)
 

47 мегабайт? Ну-ну...

   
 
 автор: Webmaster-X   (21.07.2006 в 12:59)   письмо автору
 
   для: Trianon   (21.07.2006 в 12:42)
 

>47 мегабайт? Ну-ну...
а что странного?
я открыл в ручную копировал и вставлял
токо вместо txt я использую DAT

   
 
 автор: Trianon   (21.07.2006 в 13:21)   письмо автору
 
   для: Webmaster-X   (21.07.2006 в 12:59)
 

Странно, что у Вас php по "Out of memory" не загнулся. На операции =file("47Mb.txt")

   
 
 автор: Webmaster-X   (21.07.2006 в 13:26)   письмо автору
 
   для: Trianon   (21.07.2006 в 13:21)
 

я ж не всё считываю а всего 10 строк

а если всё ставил
set_time_limit(0);
и счал всё правда вес страницы был ужасный

   
 
 автор: Trianon   (21.07.2006 в 13:31)   письмо автору
 
   для: Webmaster-X   (21.07.2006 в 13:26)
 

Ошибаетесь. Выводите Вы 10 строк. А считываете - всё.

   
 
 автор: cheops   (21.07.2006 в 23:33)   письмо автору
 
   для: Webmaster-X   (21.07.2006 в 13:26)
 

Trianon хочет сказать, что на хостинге под UNIX с настроенным PHP - это не пройдёт, там под весь скрипт отводится 8, реже 16 мегабайт и работать с такими большими файлами потребуется другими методами, например, связкой функций fopen() + fgets().

   
 
 автор: Webmaster-X   (21.09.2006 в 23:07)   письмо автору
 
   для: cheops   (21.07.2006 в 23:33)
 

а можна не большой пример

   
 
 автор: cheops   (22.09.2006 в 12:02)   письмо автору
 
   для: Webmaster-X   (21.09.2006 в 23:07)
 

Можно
<?php 
  
// Открываем файл
  
$fd fopen("text.txt""r");
  if(
$fd)
  {
    
// Построчно читаем файл, пока не встретится
    // конец файла
    
while(!feof($fd))
    {
      
// Читаем текущую строку
      
$str fgets($fd10000);
    }
    
// Закрываем файл
    
fclose($fd);
  }
?> 

На каждой итерации цикла читается текущая строка файла $str, при этом в каждый момент времени строка только одна и память соответственно резервируется только для этой строки.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования