![]() |
Модераторы: Aliance, skyboy, MoLeX, ksnk |
![]() ![]() ![]() |
|
Kolgarn |
|
||||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 22.4.2012 Репутация: нет Всего: нет |
Собственно столкнулся с проблемой.
Пишу небольшой скриптик под одно приложение. Вопрос в том, что актуальность в скрипте должна быть 50-60 мс. Файл целиком состоит из таких строк:
Причем наличие внутренних скобок, двоеточий не постоянно. Что вынудило меня использовать регулярки. Далее я написал что-то вроде:
Нет, оно не падает и прекрасно работает. Вопрос лишь в том, что я совсем не уверен в том, что это такая офигительная идея сидеть на хендале и вот так читать строки. Уже пару раз оно тупо строки пропускало в рамках тестирования под нагрузкой(пропихивал под парсинг большой поток строк). Собственно 2 вопроса: 1) Может есть какой-то оригинальный способ разобрать строку не регулярками или с ними но быстрее? При учете, что explode не катит ибо скобки бывают и круглыми и квадратными и треугольными(да и кол-во внутренних переменных не постоянно) -_- 2) Как лучше организовать потоковое чтение из файла? Повторяю актуальность нужна в пределах 50 мс, а лучше меньше. Это сообщение отредактировал(а) Kolgarn - 22.4.2012, 07:41 |
||||
|
|||||
Kolgarn |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 22.4.2012 Репутация: нет Всего: нет |
Дополнение по прегам...
Примерно такой хочу использовать что-бы отлавливать все скобки и етк.
Возникла сложность при анализе текста вроде:
Результат:
Это preg_match_all с PREG_SET_ORDER. Я вижу где ошибка, но понять не могу как исправить правильнее ее. Не подскажите? Так же если сможете то, что в {} получать без онных, то цены вообще вам не будет =) Это сообщение отредактировал(а) Kolgarn - 22.4.2012, 09:08 |
||||||
|
|||||||
Kolgarn |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 22.4.2012 Репутация: нет Всего: нет |
Такс... для обработки строк вида:
написал:
При работе с строкой(preg_match_all + PREG_SET_ORDER) выдает:
Что затрудняет анализ. В принципе попробую функцию "маску" написать, которая будет оценивать сопоставление. Не до конца уверен в правильности абсолютной, посему прошу оценить и подсказать если возможно лучше сделать. Это сообщение отредактировал(а) Kolgarn - 22.4.2012, 10:49 |
||||||
|
|||||||
Kolgarn |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 22.4.2012 Репутация: нет Всего: нет |
Начинаю все больше убеждаться, что php вообще не подходит для подобного... ни одного вразумительного ответа на 4 форумах по этому поводу -_-
Плюс заметил, что так или иначе теряются строки при моей реализации, что не есть хорошо. Может все-таки кто-то сталкивался с анализом текстового файла в потоковом режиме на php? |
|||
|
||||
ksnk |
|
||||||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 12 Всего: 386 |
Обычно, такой результат больше характеризует не о задачу, а того, кто задает вопрос. Что за приложение? Откуда у приложения взялся php? Смысл этого предложения ускользает.
Какие строки? Примеры строк, какой результат нужен? Что значит - разобрать?
Что такое потоковое чтение? Накой оно нужно? p.s. «Если вы не можете объяснить что-то шестилетнему ребенку, значит, вы сами этого не понимаете.» — Энштейн -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
||||||
|
|||||||
Kolgarn |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 22.4.2012 Репутация: нет Всего: нет |
Мне ваш сарказм не понятен - абсолютно все было уже сказано в теме из вами перечисленного. По пунктам, пропуская первое высказывание: 1) Приложение абсолютно стороннее. Оно генерирует текстовый файл, который и нужно постоянно анализировать. 2) Смысл в том, что все время потраченное на получение, анализ и вывод результата от записи в нужный файл сторонней программой строки должно укладываться в 50-100 миллисекунд. Еще дополнительный момент к этому - в секунду в файл пишется порядка 5-10 строк в определенных ситуациях. Критичен порядок анализа. 3) Если бы пригляделись - я 3жды указывал пример строки для анализа. 4) В моем понимании "чтение не отходя от кассы". Т.е. постоянное отслеживание состояния файла и обработка ново поступивших строк. Это сообщение отредактировал(а) Kolgarn - 23.4.2012, 06:25 |
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 12 Всего: 386 |
Чем меньше регулярка тем быстрее работают с ней функции. Так что разумнее не делать preg_match all на всю строку, а порезать ( explode ) по закрывающим квадратным скобкам на блоки информации и анализировать их отдельно. Первую сразу преобразовывать во время.
Регулярку, насколько хватило моих телепатических способностей, я бы переписал так
Хотя в телепатии не силен и что там на самом деле надо - не понимаю. С форматом нифига не ясно. Строка состоит из даты в квадратных скобках и информации в крадратных скобках. В каком виде хочется получить эту информацию? Функция чтения содержит классическую ошибку ![]() Если строки в файле появляются быстрее, чем $config['timeout'], то чтение будет идти все равно со скоростью не больше 1 строка в $config['timeout'] и `актуальность` пролетает. нужно читать в цикле из файла, пока не прочитает пустую строку и только после этого можно спать. -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
Kolgarn |
|
||||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 22.4.2012 Репутация: нет Всего: нет |
Да я так и делаю. С Ipad'a сижу вот и скинул код, что успел вспомнить) По explode у меня проблема в том, что переодически есть и другие типы скобок -_- Спасибо за совет по разрезанию. Признаться не думал, что отдельные преги будут быстрее. |
||||
|
|||||
![]() ![]() ![]() |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Тексты | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |