| Новости | 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 небольшое.