Страница 4 из 4

Функция обратная WHERE()

Добавлено: 28 Февраль 2023, 22:16
Игорь Столяров
Добыл аленький цветочек ! :)
Теперь можно получать полный путь к полю по номеру из структуры GROUP.
И это ключ к парсингу XML с одинаковыми именами тегов. :)

Код: Выделить всё

! Получить полный путь к полю структуры данных (без массивов)
AntiWhere  Procedure(*Group gGroup,Long lColumn)  !,String
xParentField   Any
xIndex         Long(1)
xFieldName     CString(101)
xGrRef         &Group
xGrCol         Long(1)
  Code
  xParentField = ''
  Loop
    If    Who(    gGroup,xIndex) = '' then Break  ! Закончились поля
    elsIf IsGroup(gGroup,xIndex)                  ! Группа
       xGrRef &= GetGroup(gGroup,xIndex)
       xGrCol  = 1
       Loop
         If Who(xGrRef,xGrCol) = '' then Break
         elsIf (xIndex + xGrCol) = lColumn        ! Поле входит в группу
            xParentField = xParentField & Choose(xParentField = '','','/') & Lower(Who(gGroup,xIndex))
            Break
         end
         xGrCol += 1
       end
    end
    xIndex += 1
    If xIndex = lColumn then Break.
  end 
  Return xParentField & Choose(xParentField = '','','/') & Lower(Who(gGroup,lColumn))

Функция обратная WHERE()

Добавлено: 01 Март 2023, 9:10
finsoftrz
Игорь Столяров писал(а): 28 Февраль 2023, 14:45 Как раз-таки здесь идея простая и ей 85 лет.
А какие ещё варианты ?
Делать отдельный парсер под каждую структуру XML ?
Задавать в имени каждого поля структуру данных текстом ?
Если я правильно понял, хотя уже не уверен, Вы хотите на стороне клариона создавать вложенные группы и кьюшки, повторяющие вложенные уровни тэгов в xml и используя в name простые имена тэгов для связи. Правильно? Тогда не буду больше разубеждать. Про минусы и ограничения такого подхода я уже написал, дальше сами.

Функция обратная WHERE()

Добавлено: 01 Март 2023, 9:48
Игорь Столяров
finsoftrz писал(а): 01 Март 2023, 9:10Правильно ?
Абсолютно верно ! :)
Потому что описание типовых структур данных идёт именно в таком формате.

Просто для прикола: посмотрите пожалуйста полное описание формата EDO в файле tXML.inc
Я даже не представляю объём обезьяньевого труда развернуть это всё в вариант как в Меркурии ... :(
А парсер разбирает это всё одной командой (пока кроме вложенных списков) ...

Функция обратная WHERE()

Добавлено: 01 Март 2023, 10:05
finsoftrz
Игорь, я в этой теме плохо Вас понимаю. Вы что-то про свое пишите. У меня все просто, как капуста. В любом случае, успеха. Как говорят самураи, цель ничто, путь все. :D

Функция обратная WHERE()

Добавлено: 01 Март 2023, 10:09
Игорь Столяров
finsoftrz писал(а): 01 Март 2023, 10:05 Игорь, я в этой теме плохо Вас понимаю
Абсолютно никаких проблем. В любом случае - большое спасибо за обсуждение. :)