LINUX.ORG.RU

Потестите авторы на тикле и на других языках


0

0

Здравствуйте.

Суть такова. Хочу в тикле с помощью regexp заменить string range
 таким образом:

Если "string range строка первый второй"

То "regexp {^.{первый}(.{второй-первый})} строка - подстрока"

(Если кто не знает тикль - string range выдаёт подстроку от первого индекса до второго.)

"первый" и "второй" - номера индексов, второй-первый - их разность. 
 В "подстрока" должна быть строка от первого индекса до второго.



Всё работает, за исключением того, что "первый" и "второй" должен
 быть меньше 256, и того, что время исполнения regexp много больше,
 чем string range, хотя особо сложного ничего не сравнивается. Первую
 проблему удаётся решить через костыли - {.{одначасть}.{втораячасть}
  и т. д. }, т. е. разбиением числа на сумму, а вот вторую никак.

У меня Tcl 8.5.3, Debian.

Просьба такая - потестите, плиз, на своих любимых языках, если в них
 есть регулярки и функции вычисления времени выполнения, и в своих
 версиях тикля данную конструкцию. Точные данные выбирайте сами, меня
 просто интересует относительный рост времени исполнения. Я брал
 строки от десятков до тысяч символов, и пытался выделить где-то
 20-80 % строки. Опять же, точное время не интересует - нужен
 порядок. У меня (строка в q)

200 символов time {regexp  {.{20}(.{150})} $q a b}  2226 microseconds
1000 time {regexp  {.{255}(.{150})} $q a b}  7961 microseconds
1000 time {regexp  {.{255}.{255}(.{150})} $q a b}   20269 microseconds
2000 time {regexp  {.{255}.{255}(.{150})} $q a b}  16290 microseconds
2000 time {regexp  {.{255}.{255}.{255}.{255}.{255}(.{150})} $q a b} 98682 microseconds


То есть видно, что чем больше нужно пропустить изначально, тем
 сильнее растёт время. Причём растёт оно очень сильно.

anonymous

Re: Потестите авторы на тикле и на других языках

Да, на других языках интересует наличие ограничения пропуска более 255 символов. Т.е. можно ли написать .{500} , .{67000} и т. д.

anonymous ()

Re: Потестите авторы на тикле и на других языках

>>Всё работает, за исключением того, что "первый" и "второй" должен быть меньше 256

Кому, интересно, они должны?

anonymous ()

Re: Потестите авторы на тикле и на других языках

Заархивируй получше свой примерный файл метров на 10 и закинь куда-нить типа www.rapidspread.com И опиши попроще, что хочешь из него выделить

anonymous ()

Re: Потестите авторы на тикле и на других языках

Еще раз повторяю - в строке от десятка до тысяч символов вытягиваем подстроку от первого до второго символа методами regexp. Никаких примерных файлов нет - просто случайная строка из букс без пробелов. Типа такой : lkdgsdsdfbkhhjfgsdkghwerutyseiurtysidourtysiubd

anonymous ()

Re: Потестите авторы на тикле и на других языках

Хм. C/pcre, файл 10000 символов, выражение "(.{255})(.{255})", ~100μs. Tcl 8.4.3 говорит ~20000 microseconds per iteration.

У pcre ограничение 65536; на том же файле "(.{9000})(.{255})" занимает ~200μs.

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.