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

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7373
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

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

Сообщение Игорь Столяров »

Добыл аленький цветочек ! :)
Теперь можно получать полный путь к полю по номеру из структуры 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))
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4615
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 37 раз

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

Сообщение finsoftrz »

Игорь Столяров писал(а): 28 Февраль 2023, 14:45 Как раз-таки здесь идея простая и ей 85 лет.
А какие ещё варианты ?
Делать отдельный парсер под каждую структуру XML ?
Задавать в имени каждого поля структуру данных текстом ?
Если я правильно понял, хотя уже не уверен, Вы хотите на стороне клариона создавать вложенные группы и кьюшки, повторяющие вложенные уровни тэгов в xml и используя в name простые имена тэгов для связи. Правильно? Тогда не буду больше разубеждать. Про минусы и ограничения такого подхода я уже написал, дальше сами.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7373
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

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

Сообщение Игорь Столяров »

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

Просто для прикола: посмотрите пожалуйста полное описание формата EDO в файле tXML.inc
Я даже не представляю объём обезьяньевого труда развернуть это всё в вариант как в Меркурии ... :(
А парсер разбирает это всё одной командой (пока кроме вложенных списков) ...
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4615
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 37 раз

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

Сообщение finsoftrz »

Игорь, я в этой теме плохо Вас понимаю. Вы что-то про свое пишите. У меня все просто, как капуста. В любом случае, успеха. Как говорят самураи, цель ничто, путь все. :D
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7373
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

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

Сообщение Игорь Столяров »

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