Показать сообщение отдельно

  #307  
Старый 06.08.2007, 04:07
Helios
Постоянный
Регистрация: 14.01.2007
Сообщений: 459
С нами: 10169427

Репутация: 589
По умолчанию

Если у тебя все строчки добавлялись в файл по этому принципу, то можно считать последнюю строку, "выдрать" из нее номер, добавить к нему единицу и записать в новую:

PHP код:

$f 
fopen('file''a+');

$str '';

for (
$i = -1$cnt=0$cnt 1$i--) // <2 если после добавления строки перевод на новую строку
{
   
fseek($f$iSEEK_END);
   
$tmp fread($f1);
   if (
$tmp == "\n")
   {
       
$cnt--;
   }
   else
   {
       
$str .= $tmp;
   }
}

fseek($f0SEEK_END);
$str strrev($str); 
Как выдрать номер, одному богу да тому, кто в файл писал, известно. Используй регексп

[upd]
А по поводу установки указателя в нужное место, имхо тут нужен поиск по файлу по методу (не помню как называется, поэтому будет так) случайных чисел.

Суть метода:

• fseek'ом переещаемся в позицию rand(0, filesize($file))

• считываем ближайшую строку

• выдираем из нее номер, если он больше нужного, то изменяем большую границу в rand на текущее положение, меньше - меньшую соответственно.

• возвращаемся в первый пункт

Таким образом гуляем по файлу, пока е найдем нужную строку.

Хоть алгоритм и кажется долгодействующим и неработоспособным - это далеко не так. На ленте препод за 10 переходов угадал загаданное от 0 до 1000 число.

Последний раз редактировалось Helios; 06.08.2007 в 04:26..
 
Ответить с цитированием