EOMY.NET
Хостинг EOMY.NET: Форум поддержки
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
RSS Feed  

Случайная строка из большого файла.
На страницу 1, 2  След.
 
Начать новую тему   Ответить на тему    Список форумов EOMY.NET -> Программирование для WEB
Случайная строка из большого файла.
Автор Сообщение
lazutov
while (1==1);
Последний герой


Зарегистрирован: 30.04.2007
Сообщения: 3840

111220 Монеты

СообщениеДобавлено: Вт, 16 Сен, 2008 15:31    Заголовок сообщения: Случайная строка из большого файла. Ответить с цитатой

Задача: есть большой(5мб) файл.
Задача: выбрать оттуда случайную строку много раз
Код:
<form  method="GET" >
файл   <input type="text" size="20" name="f" value="b1.txt" />  <br>
сепаратор:   <input type="text" size="50" name="sep" value="<br><center>***</center><br>" />  <br>
сгенерировать   <input type="text" size="5" name="num" value="" /> групп по
   <input type="text" size="5" name="qc" value="" /> строк
<input class="button" type="submit"  value="далее" />
</form>
<?
if (!isset($_GET['f'])) die ('f_nf');
if (!isset($_GET['num'])) die ('num_nf');
if (!isset($_GET['qc'])) die ('qc_nf');
//if ((!is_integer($_GET['qc']))OR(!is_int($_GET['num']))) die('VARS NOT NUM');
$num=$_GET['num'];
$qc=$_GET['qc'];
$sep=$_GET['sep'];
 $f=$_GET['f'];


 //time
 $time=microtime(1);

$f=file_get_contents($f);
$f=EXPLODE("\n",$f);
$count=count($f);

for($i=1; $i++; $i<=$num) {
$res='';
for($j=1; $j++; $j<=$qc) { $res.=array_rand($f).$sep;}
echo $res;
echo '<br><hr><br>';
flush;
}

 // time
 $time= substr (microtime(1) - $act['time'],0,4);
 echo"<br><h2> zatraceno $time</h2>";
?>

результат: при выборе 25 значений из 5мб перерасход памяти более 128мб

Вопрос: что делать
Заранее спс.
PS как всегда от меня ждите монетки
_________________
сервис DNS | разные http, DNS и прочие утилиты
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Александр Михалицын
Согнул ложку
Согнул ложку


Зарегистрирован: 22.08.2008
Сообщения: 860

18841 Монеты

СообщениеДобавлено: Вт, 16 Сен, 2008 15:57    Заголовок сообщения: Ответить с цитатой

lazutov,
я думаю, что тут проблема в размере файла.
Попробуйте вместо:
Код:
$f=file_get_contents($f);

написать:
Код:
function fopenBig($file)
{
   $file = fopen($file, "r");
   while (!feof($file))
   {
      $content = fgets($file);   
   }
   fclose($file);
   return $content;
}
$f = fopenBig($f);

_________________
Пригласительные коды
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
lazutov
while (1==1);
Последний герой


Зарегистрирован: 30.04.2007
Сообщения: 3840

111220 Монеты

СообщениеДобавлено: Вт, 16 Сен, 2008 15:59    Заголовок сообщения: Ответить с цитатой

Нет. На саму операцию открытия и загрузки в переменную тратиться менее 0.3 сек.
Проблемы начинаются на этапе выбора из массива.
_________________
сервис DNS | разные http, DNS и прочие утилиты
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Александр Михалицын
Согнул ложку
Согнул ложку


Зарегистрирован: 22.08.2008
Сообщения: 860

18841 Монеты

СообщениеДобавлено: Вт, 16 Сен, 2008 16:04    Заголовок сообщения: Ответить с цитатой

Время это одно.
А ведь у вас память расходуется...
попробуйте все таки мой вариант.
А я сейчас еще подумаю что можно оптимизировать... Smile
_________________
Пригласительные коды
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Александр Михалицын
Согнул ложку
Согнул ложку


Зарегистрирован: 22.08.2008
Сообщения: 860

18841 Монеты

СообщениеДобавлено: Вт, 16 Сен, 2008 16:06    Заголовок сообщения: Ответить с цитатой

Код:
for($i=1; $i++; $i<=$num)

Это как? Shocked
Я думал так надо:
Код:
for($i=1; $i<=$num; $i++)

То же самое и в другом цикле, или я что-то не догоняю?

А что касаемо оптимизации, нечего там оптимизировать,
скрипт маловать, а перерасход памяти из-за большого размера
файла, вы все таки мой вариант попробовали?
_________________
Пригласительные коды
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
lazutov
while (1==1);
Последний герой


Зарегистрирован: 30.04.2007
Сообщения: 3840

111220 Монеты

СообщениеДобавлено: Вт, 16 Сен, 2008 16:13    Заголовок сообщения: Ответить с цитатой

всеравно вылет по allowedMEM
_________________
сервис DNS | разные http, DNS и прочие утилиты
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
girafenok
Два пингвиненка
Два пингвина


Зарегистрирован: 17.11.2007
Сообщения: 333

11827 Монеты

СообщениеДобавлено: Вт, 16 Сен, 2008 16:37    Заголовок сообщения: Ответить с цитатой

1.
Код:
for($i=1; $i<=$num; $i++) {
$res='';
for($j=1; $j<=$qc; $j++) { $res.=array_rand($f).$sep;}
echo $res;
echo '<br><hr><br>';
flush;
}

меняем на
Код:
for($i=1; $i<=$num; $i++) {
for($j=1; $j<=$qc; $j++) { $echo array_rand($f).$sep;}
echo '<br><hr><br>';
flush;
}

2. php как CGI работает? Насколько эффективно использовать flush? Может все дело в нем: вместо очищение буфера, происходит его дублирование.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
lazutov
while (1==1);
Последний герой


Зарегистрирован: 30.04.2007
Сообщения: 3840

111220 Монеты

СообщениеДобавлено: Вт, 16 Сен, 2008 16:50    Заголовок сообщения: Ответить с цитатой

шайтанаме.....
перепутал параметры цикла...
Всем спасибо, выраженное в 1кг монет
Embarassed
_________________
сервис DNS | разные http, DNS и прочие утилиты
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Веденин
Красные глаза
Красные глаза


Зарегистрирован: 17.05.2007
Сообщения: 2066
Откуда: Самара
11733 Монеты

СообщениеДобавлено: Вт, 16 Сен, 2008 18:03    Заголовок сообщения: Ответить с цитатой

Цитата:
ну вот опоздал, может мне хотя бы живого пирата покажете (c)
Very Happy
Жалко не успел поучаствовать Very Happy
_________________
Написание конвекторов, парсеров, интеграции нескольких сайтов (в личку)

Тематические поисковые системы Рунета: Танцевальная, программиста, поиск книг
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
lazutov
while (1==1);
Последний герой


Зарегистрирован: 30.04.2007
Сообщения: 3840

111220 Монеты

СообщениеДобавлено: Вт, 16 Сен, 2008 18:16    Заголовок сообщения: Ответить с цитатой

просто я использую монетки по ПРЯМОМУ назнчению.
Что и Вам всем советую
_________________
сервис DNS | разные http, DNS и прочие утилиты
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Александр Михалицын
Согнул ложку
Согнул ложку


Зарегистрирован: 22.08.2008
Сообщения: 860

18841 Монеты

СообщениеДобавлено: Ср, 17 Сен, 2008 07:44    Заголовок сообщения: Ответить с цитатой

Так что с памятью проблемы решились? Razz
_________________
Пригласительные коды
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
lazutov
while (1==1);
Последний герой


Зарегистрирован: 30.04.2007
Сообщения: 3840

111220 Монеты

СообщениеДобавлено: Ср, 17 Сен, 2008 11:38    Заголовок сообщения: Ответить с цитатой

ВСЕ РЕШИЛОСЬ. спасибо
_________________
сервис DNS | разные http, DNS и прочие утилиты
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Александр Михалицын
Согнул ложку
Согнул ложку


Зарегистрирован: 22.08.2008
Сообщения: 860

18841 Монеты

СообщениеДобавлено: Ср, 17 Сен, 2008 11:45    Заголовок сообщения: Ответить с цитатой

Понял.
Тогда eomysupport.
Закройте тему. Wink
_________________
Пригласительные коды
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
eomysupport
Администратор
Администратор


Зарегистрирован: 25.12.2005
Сообщения: 5087

66545 Монеты

СообщениеДобавлено: Чт, 18 Сен, 2008 01:54    Заголовок сообщения: Ответить с цитатой

Александр Михалицын
Зачем?
_________________
Дмитрий

Техническая поддержка бесплатного хостинга осуществляется только через форум поддержки
Часто задаваемые вопросы по хостингу
Условия предоставления услуг бесплатного хостинга
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Александр Михалицын
Согнул ложку
Согнул ложку


Зарегистрирован: 22.08.2008
Сообщения: 860

18841 Монеты

СообщениеДобавлено: Чт, 18 Сен, 2008 07:28    Заголовок сообщения: Ответить с цитатой

eomysupport,
ну вопрос ведь решен?
Я вот всегда закрываю если вопрос решен. Embarassed
Ладно... не закрывайте я ж просто предложил... Confused
Во избежании появления новых постов.. Rolling Eyes
_________________
Пригласительные коды
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов EOMY.NET -> Программирование для WEB Часовой пояс: GMT
На страницу 1, 2  След.
Страница 1 из 2

 


EOMY TOP 100 Rambler's Top100   Рейтинг@Mail.ru    



Powered by phpBB © 2001, 2005 phpBB Group


Рейтинг SIMPLETOP.NET