Призывается к помощи клуб знатоков: как максимально лаконично/эффективно распарсить поля форм вида name.1.2=value в многовложенный хеш? (Или изменить код от Misha, rip_max?)
andylars 20.09.2015 23:23
/ 21.09.2015 01:37
Как-то задавал вопрос по парсингу данных из форм.
В итоге нашлось решение:
которое парсит
name[1][2]=value.. в многовложенный хеш,
мне надо примерно тоже самое, но разделитель (точка), т.е. шаблон вида:
name.a.b.c=value должен преобразоваться в многовложенный хеш.
Каюсь, с регулярками дружу пока плохо, чтобы без граблей быть уверенным,
да и мысли, что в моем случае split может оказаться быстрее,
а значит код наверное значительно может похудеть?
Плюс ко всему "синтаксис" как бы совпадает с нативным у парсера, и может можно и вовсе,
как-то безопасно транслировать в код.
Факты: сам уже наигрался с "ручным" парсингом и циклами в хеше и убедился как быстро можно отожрать производительность.
И поэтому призываю гуру помочь.
-----
P.S.:
Собственно найденый мной код для name[1][2]=value
@CLASS
serialForm
@getData[][names]
$self.data[^hash::create[]]
$hBlackList[$.action[1]]
$oRegex[^regex::create[\^[([^^\^]]+)\^]][g']]
^form:fields.foreach[field;value]{
^if(!def $hBlackList.$field){
^self.parseData[$field;$value]
}
}
$result[$self.data]
@parseData[field;value][t;h]
$t[^field.match[$oRegex]]
^if(def $t.prematch){
$h[^create[$self.data;$t.prematch]]
^t.menu{
^if(^t.line[] == $t){
$h.[$t.1][$value]
}{
$h[^create[$h;$t.1]]
}
}
}{
$self.data.[$field][$value]
}
@create[h;k]
^if(!($h.$k is "hash")){
$h.[$k][^hash::create[]]
}
$result[$h.$k]
- Призывается к помощи клуб знатоков: как максимально лаконично/эффективно распарсить поля форм вида name.1.2=value в многовложенный хеш? (Или изменить код от Misha, rip_max?), andylars 20.09.2015 23:23 / 21.09.2015 01:37
- Ответ, Misha v.3 [M] 21.09.2015 10:52 / 21.09.2015 11:12