Новости | FAQ | Авторы | Документация | В действии | Библиотека |
Инструменты | Полезные ссылки | Хостинги | Скачать | Примеры | Форум |
Misha v.3 02.05.2014 01:55 / 02.05.2014 06:46
перебираем все кусочки, которые были внутри квадратных скобок и для каждого из них, кроме последнего создаём на нужном уровне хеш (если его ещё нет). после создания в переменную h кладём указатель на этот хеш (готовим для следующей итерации). для последнего кусочка записываем значение. всё.@parseData[field;value][result;match;t;h;i] $t[^field.match[\^[([^^\^]]+)\^]][g']] ^if($t){ $h[^create[$self.data;$t.prematch]] ^for[i](1;$t-1){ $h[^create[$h;$t.1]] ^t.offset[cur](1) } $h.[$t.1][$value] }{ $self.data.[$field][$value] } @create[h;k][result] ^if(!$h.$k){$h.[$k][^hash::create[]]} $h.$kеё смысл в том, чтобы в цикле два call-а (if, line) заменить на один (offset) без существенного ухудшения читаемости кода. call -- одна из самых дорогих операций в парсере. однако в данном случае это всё несущественно, т.к. длинных циклов тут не будет и количество обрабатываемых field небольшое.