Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Количество букс в строке. [2]

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): « 1 [2]   

> Без описания
jonston
Отправлено: 24 Марта, 2014 - 15:05:23
Post Id



Посетитель


Покинул форум
Сообщений всего: 455
Дата рег-ции: Март 2011  


Помог: 3 раз(а)




EuGen пишет:

Здесь нет "точной" выборки кириллицы (поскольку всё, что не попадает в нижнюю половину ASCII, мы считаем как "кириллицу")


Fatal error: Maximum execution time of 30 seconds exceeded in Z:\home\test.dev\www\chars.php on line 25 (
И еще там объявил массив в стиле javascript.


-----
$i = 0;
$i = $i++ + ++$i; ?
 
 Top
EuGen Администратор
Отправлено: 24 Марта, 2014 - 15:11:10
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Массив с коротким синтаксисом объявления доступен с PHP 5.4; если не хватает времени - то добавить
в начало скрипта. Если нельзя менять время исполнения - не использовать PHP


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
jonston
Отправлено: 24 Марта, 2014 - 15:17:27
Post Id



Посетитель


Покинул форум
Сообщений всего: 455
Дата рег-ции: Март 2011  


Помог: 3 раз(а)




EuGen пишет:
Массив с коротким синтаксисом объявления доступен с PHP 5.4; если не хватает времени - то добавить
в начало скрипта. Если нельзя менять время исполнения - не использовать PHP


Вот если $mb_substr_count() использовать, то вкладывается в 5 секунд исполнения.Значит все же целесообразно его использовать?


-----
$i = 0;
$i = $i++ + ++$i; ?
 
 Top
EuGen Администратор
Отправлено: 24 Марта, 2014 - 15:18:48
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Нет, значит, что цикл бесконечный. В моём случае отработало всё верно. mb_substr_count никак не поможет на случай, если данные нельзя загрузить в память.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
jonston
Отправлено: 24 Марта, 2014 - 15:21:29
Post Id



Посетитель


Покинул форум
Сообщений всего: 455
Дата рег-ции: Март 2011  


Помог: 3 раз(а)




EuGen пишет:
Нет, значит, что цикл бесконечный. В моём случае отработало всё верно. mb_substr_count никак не поможет на случай, если данные нельзя загрузить в память.


Почему у меня тогда не вкладывается в 30 секунд?


-----
$i = 0;
$i = $i++ + ++$i; ?
 
 Top
EuGen Администратор
Отправлено: 24 Марта, 2014 - 15:25:18
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




jonston пишет:
Почему у меня тогда не вкладывается в 30 секунд?

EuGen пишет:
значит, что цикл бесконечный

- ищите, что не верно сделано.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
jonston
Отправлено: 24 Марта, 2014 - 15:31:25
Post Id



Посетитель


Покинул форум
Сообщений всего: 455
Дата рег-ции: Март 2011  


Помог: 3 раз(а)




EuGen пишет:
jonston пишет:
Почему у меня тогда не вкладывается в 30 секунд?

EuGen пишет:
значит, что цикл бесконечный

- ищите, что не верно сделано.


Добавил время обработки.Сработало но примерно через минуту.Вес файла меньше 6 мб.Расширение файла .txt.Локальный сервер.В скрипте поменял только $chars = []; и путь к файлу.


-----
$i = 0;
$i = $i++ + ++$i; ?
 
 Top
EuGen Администратор
Отправлено: 24 Марта, 2014 - 15:32:53
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




6Mb = 6*10242 чтений 1 символа из файла и записи в массив. Это может быть медленно, но это - единственный способ обработки файлов произвольного размера.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
jonston
Отправлено: 24 Марта, 2014 - 15:35:53
Post Id



Посетитель


Покинул форум
Сообщений всего: 455
Дата рег-ции: Март 2011  


Помог: 3 раз(а)




EuGen пишет:
6Mb = 6*1024<sup>2</sup> чтений 1 символа из файла и записи в массив. Это может быть медленно, но это - единственный способ обработки файлов произвольного размера.

Понятно.Смысл в том что бы не выгружать все в память а считывать на лету.Спасибо.


-----
$i = 0;
$i = $i++ + ++$i; ?
 
 Top
EuGen Администратор
Отправлено: 24 Марта, 2014 - 15:40:45
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Процесс можно ускорить, если знать, что в файле есть переносы строк - и строки не превышают допустимых размеров. Тогда - читать поблочно (fgets) и применять один из методов подсчёта, что дан выше для полностью загруженных в память данных.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
jonston
Отправлено: 24 Марта, 2014 - 15:44:22
Post Id



Посетитель


Покинул форум
Сообщений всего: 455
Дата рег-ции: Март 2011  


Помог: 3 раз(а)




EuGen пишет:
Процесс можно ускорить, если знать, что в файле есть переносы строк - и строки не превышают допустимых размеров. Тогда - читать поблочно (fgets) и применять один из методов подсчёта, что дан выше для полностью загруженных в память данных.


переносы строк есть.Допустим есть лимит памяти 1мб.Что нужно изменить что бы считывать с учетом этого лимита?


-----
$i = 0;
$i = $i++ + ++$i; ?
 
 Top
EuGen Администратор
Отправлено: 24 Марта, 2014 - 16:01:54
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




jonston пишет:
переносы строк есть

jonston пишет:
Допустим есть лимит памяти 1мб.

Нужно быть уверенными в том, что строка не превысит этот самый 1Mb (на самом деле, чуть меньше, так как нужно ещё и сам массив хранить). В этом случае, можно поступить так:

PHP:
скопировать код в буфер обмена
  1. function countCyr($string)
  2. {
  3.    return array_count_values(
  4.       preg_split('/[^А-Яа-яЁё]*/u', mb_strtoupper($string, 'UTF-8'), -1, 1)
  5.    );
  6. }
  7.      
  8. $path = '/path/to/file.txt';
  9. $file = fopen($path, 'r');
  10. $chars = array();
  11. while(!feof($file))
  12. {
  13.    foreach(countCyr(fgets($file)) as $char=>$count)
  14.    {
  15.       $chars[$char]=isset($chars[$char])?$chars[$char]+$count:1;
  16.    }
  17. }
  18. fclose($file);
  19. arsort($chars);


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Страниц (2): « 1 [2]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB