parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Привожу код, но довести до ума никак не получается... затуп просто какой-то уже который день...нужен взгляд со стороны

andylars 27.09.2015 18:34 / 27.09.2015 19:08

@main[]

$hsh[
     $.a[A]
     $.b[
          $.1[B1]
          $.2[B2]
     ]
     $.c[C]
]

^Hash_Serial[$hsh]

# хочется, чтобы возвращало a=A&b.1=B1&b.2=B2&c=C


@Hash_Serial[_data;_key;_result][locals]

^sys:Debug[$_key;_key]

^if($_data is hash){
    ^_data.foreach[k;v]{
        $_key[${_key}.${k}]
        $_result[^Hash_Serial[$v;$_key;$_result]]
    }
}{
    $_key[^_key.trim[left;.]]
    $_result[$_result&$_key=$_data]
    $_result[^_result.trim[left;&]]

    $result[$_result]

    ^sys:Debug[$_result;_result]
}



# рабочего результата не добился, и не оптимизировал присвоения для читабельности
# есть поток отладчика в местах ^sys:Debug[var;comment] :
# который показывает, промежуточные "успехи"... где видно, что
# $_key ключи продолжают собираться, дальше чем надо
# $_result - накапливается и теряется на последнем ключе 

COMMENT: VAR_VALUE                  CLASS

   _key:                            <void>
   _key: .a                         <string>
_result: a=A                        <string>
   _key: .a.b                       <string>
   _key: .a.b.1                     <string>
_result: a=A&a.b.1=B1               <string>
   _key: .a.b.1.2                   <string>
_result: a=A&a.b.1=B1&a.b.1.2=B2    <string>
   _key: .a.b.c                     <string>
_result: a.b.c=C                    <string>