Group - узнать принадлежность

Clarion, Clarion 7

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

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
gopstop2007
Полимат
Сообщения: 1810
Зарегистрирован: 25 Март 2009, 21:55
Благодарил (а): 24 раза
Поблагодарили: 10 раз

Group - узнать принадлежность

Сообщение gopstop2007 »

Локальные данные

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

l_Group1  GROUP,PRE(G1)
NameField1            STRING(20)
NameField2            STRING(20)
NameField3            STRING(20)
                     END 
NameFieldNoGroup            STRING(20)
Как узнать принадлежность поля к группе и получить префикс этой группы?
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
Shur
Ветеран
Сообщения: 384
Зарегистрирован: 02 Июль 2011, 18:49

Group - узнать принадлежность

Сообщение Shur »

Боюсь, я не первый, кто ещё не понял суть вопроса.
gopstop2007
Полимат
Сообщения: 1810
Зарегистрирован: 25 Март 2009, 21:55
Благодарил (а): 24 раза
Поблагодарили: 10 раз

Group - узнать принадлежность

Сообщение gopstop2007 »

команды с помощью которых можно узнать что поле NameField2 относится к группе под названием l_Group1 и имеет префикс G1
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
Shur
Ветеран
Сообщения: 384
Зарегистрирован: 02 Июль 2011, 18:49

Group - узнать принадлежность

Сообщение Shur »

Ааа! Просто кода с ассайном (&=) не видать! А без него вопрос становится в какой-то мере бессмысленным.
Команд таких раньше было три What()/Who()/Where(). В данном случае, должно быть, Where().
Последний раз редактировалось Shur 06 Январь 2016, 15:09, всего редактировалось 1 раз.
Shur
Ветеран
Сообщения: 384
Зарегистрирован: 02 Июль 2011, 18:49

Group - узнать принадлежность

Сообщение Shur »

Сорри, проверил себя -- WHERE() не отвечает на поставленный вопрос.
А вот дополнительно введенные HOWMANY()/GETGROUP()/ISGROUP() должны помочь.
gopstop2007
Полимат
Сообщения: 1810
Зарегистрирован: 25 Март 2009, 21:55
Благодарил (а): 24 раза
Поблагодарили: 10 раз

Group - узнать принадлежность

Сообщение gopstop2007 »

я эти команды видел-знаю :)
Shur писал(а):HOWMANY()/GETGROUP()/ISGROUP() должны помочь.
и они не подходят, так как для этих команд требуется в виде начальных значений наличие(название) самой группы, а я об этом "не знаю" изначально :)
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3289
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 15 раз
Поблагодарили: 49 раз
Контактная информация:

Group - узнать принадлежность

Сообщение Дед Пахом »

Вот так я вычисляю индекс поля в группе:

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

msxml::GetFieldNumber         PROCEDURE(*GROUP pG, STRING pFieldName)
aRef                            ANY
cIndex                          LONG, AUTO
  CODE
  LOOP cIndex = 1 TO 2147483647
    aRef &= WHAT(pG, cIndex)
    IF aRef &= NULL
      BREAK
    END
    
    IF UPPER(WHO(pG, cIndex)) = UPPER(pFieldName) OR UPPER(msxml::RemovePrefix(WHO(pG, cIndex), TRUE)) = UPPER(pFieldName)
      RETURN cIndex
    END
  END
  
  RETURN 0
С уважением, ДП
gopstop2007
Полимат
Сообщения: 1810
Зарегистрирован: 25 Март 2009, 21:55
Благодарил (а): 24 раза
Поблагодарили: 10 раз

Group - узнать принадлежность

Сообщение gopstop2007 »

:shock: Ого. Спасибо, не думал что так всё сложно :) Хотя, может кто то предложит более простой вариант :)
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3289
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 15 раз
Поблагодарили: 49 раз
Контактная информация:

Group - узнать принадлежность

Сообщение Дед Пахом »

gopstop2007 писал(а): Ого. Спасибо, не думал что так всё сложно Хотя, может кто то предложит более простой вариант
Присоединяюсь, код выглядит слегка дико, но ничего лучшего я добиться не смог.
С уважением, ДП
Shur
Ветеран
Сообщения: 384
Зарегистрирован: 02 Июль 2011, 18:49

Group - узнать принадлежность

Сообщение Shur »

Тут есть вот какое предложение.
Если известен конечный список групп, то ссылки на них можно держать в очереди вроде:

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

AllGroups QUEUE
GroupName   string(20)
GroupPrefix string(5)
Ref         &group
          END 
то в дальнейшем установить принадлежность к той или иной группе можно так:

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

CheckingField &= ... ! неизвестно что и главное откуда
loop I# = 1 to records(AllGroups)
   get(AllGroups, I#)
   Where# = WHERE(AllGroups.Ref, CheckingField)
   if Where# > 0 then
      message('The field ' & WHO(AllGroups.Ref, Where#) & ' belongs to ' & AllGroups.GroupName & ' which has prefix ' & AllGroups.GroupPrefix)
      break
   end !if   
end !loop 
За синтаксис не ручаюсь. Но идея может оказаться полезной.
Последний раз редактировалось Shur 07 Январь 2016, 12:26, всего редактировалось 1 раз.
gopstop2007
Полимат
Сообщения: 1810
Зарегистрирован: 25 Март 2009, 21:55
Благодарил (а): 24 раза
Поблагодарили: 10 раз

Group - узнать принадлежность

Сообщение gopstop2007 »

Shur писал(а): Но идея может оказаться полезной.
спасибо, но мне кажется механизм схож на указаный Дед-ом Пахом-ом :) Может кто укажет другой... А как через язык шаблонов решается это?
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
Shur
Ветеран
Сообщения: 384
Зарегистрирован: 02 Июль 2011, 18:49

Group - узнать принадлежность

Сообщение Shur »

Не, у меня оригинальный способ!
Он нигде не использует строковые сравнения (UPPER()=UPPER()). Число переборов сокращено до предела!
А как изящно он разбирается с префиксом группы!
:lol:
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3289
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 15 раз
Поблагодарили: 49 раз
Контактная информация:

Group - узнать принадлежность

Сообщение Дед Пахом »

gopstop2007 писал(а): А как через язык шаблонов решается это?
для начала - через язык шаблонов не добраться до групп, объявленных от руки, а не в локальных/глобальных данных.
С уважением, ДП
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3289
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 15 раз
Поблагодарили: 49 раз
Контактная информация:

Group - узнать принадлежность

Сообщение Дед Пахом »

Shur писал(а): Не, у меня оригинальный способ! Он нигде не использует строковые сравнения (UPPER()=UPPER()). Число переборов сокращено до предела! А как изящно он разбирается с префиксом группы!
Число переборов вырастет в N раз, если Вам, как и мне, надо найти индекс поля в группе по его имени (а имена в Clarion как известно регистронечувствительные). То есть "myfield", "MyFiElD" или "GRP!:MYFIELD" означает одно и то же поле одной конкретной группы. Как без UPPER?
С уважением, ДП
PavelNK
Старожил
Сообщения: 279
Зарегистрирован: 15 Март 2011, 8:02

Group - узнать принадлежность

Сообщение PavelNK »

Match в помощь!
Ответить