List Data to String Parsing

Clarion, Clarion 7

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

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Developer
Ветеран
Сообщения: 551
Зарегистрирован: 26 Март 2012, 17:18

List Data to String Parsing

Сообщение Developer »

Привет всем!

Есть ли возможность присвоить (распарсить) динамическое содержимое элементов List в переменные типа STRING (CSTRING) без отображения в Browse?

Есть ли возможность получить значение конкретного элемента?
С Уважением, Developer
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

List Data to String Parsing

Сообщение kreator »

Переведите. Ничего непонятно. Или напомнить о функциях what, who, where?
We are hard at work… for you. :)
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7330
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

List Data to String Parsing

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

Да, немного не формализован вопрос … Здесь бы сначала определиться с терминологией.
LIST - базовый элемент интерфейса для списков;
BROWSE - формируемая шаблонами структура списка, состоящая из LIST, View, Files и т.д.

Т.е. в общем случае, для работы с содержимым LIST никакой BROWSE не нужен.
Если мы хотим разобрать структуру LIST, то просто работаем с ней напрямую.
Здесь хороший пример - это менеджер форматов списков (хотя в стандартных шаблонах он убогий)

Упрощённый пример разбора структуры LIST:

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

  ! Присвоили содержимое LIST в строку
  FormatSTR = ?MyList{PropList:Format}
  
  ! А далее можем LIST распарсить и получить параметры каждого элемента

  Loop Loc:xCount = 1 to ?MyList{PropList:Exists,0} by 1
  
    If ?MyList{PropList:Exists,Loc:xCount} = True
  
       ColWidth    = ?MyList{PropList:Width,Loc:xCount}   ! Ширина колонки
       ColResize   = ?MyList{PropList:Resize,                  Loc:xCount}
       BSColor     = ?MyList{PropList:BackSelected,            Loc:xCount}
       BColor      = ?MyList{PropList:BackColor   ,            Loc:xCount}
       TSColor     = ?MyList{PropList:TextSelected,            Loc:xCount}
       ColFormat   = ?MyList{PropList:Format      ,             Loc:xCount}
       FieldNo     = ?MyList{PropList:FieldNo     ,             Loc:xCount}
       ColFixed    = ?MyList{PropList:Fixed,                   Loc:xCount}
       GroupName   = ?MyList{PropList:Header + PropList:Group, Loc:xCount}
       GroupFormat = ?MyList{PropList:Format + PropList:Group, Loc:xCount}
       GroupNo     = ?MyList{PropList:GroupNo,                 Loc:xCount}  ! Номер группы
  
       GroupCount  = ?MyList{PropList:GroupNo + PropList:Group,Loc:xCount}  ! Кол-во колонок в группе
  
                                                                                     ! Есть группа
       If ?MyList{PropList:GroupNo + PropList:Group,Loc:xCount} > 0 then Loc:FGroup = True.
  
       Omit('**CW6**',_CWVER_ = 6100)
       HColor = ?MyList{PropList:HdrTextColor,Loc:xCount}
       **CW6**
       
       ! и т.д.
    end
  end
За теми кто отстал - не возвращаться. (С) Кодекс
Developer
Ветеран
Сообщения: 551
Зарегистрирован: 26 Март 2012, 17:18

List Data to String Parsing

Сообщение Developer »

kreator писал(а): 09 Сентябрь 2018, 18:25Переведите. Ничего непонятно. Или напомнить о функциях what, who, where?
Kreator и Игорь Столяров спасибо за отклик и за правильные замечания. :wink:

Игорь Столяров точно понял мой вопрос и предоставил возможное практическое решения - сейчас попробую - необходимо получить значение конкретного элемента List :D

Kreator, а как применить what, who, where - к List (как на примере Игоря Столярова (Упрощённый пример разбора структуры LIST:)) - приведи, пожалуйста, рабочий пример применительно к List
С Уважением, Developer
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

List Data to String Parsing

Сообщение kreator »

what, who, where к очереди применяются. Удобно оперировать номерами переменных в очереди, а не их наименованиями.
LOC:CurrentField &= WHAT(LOC:Queue,10) достаёт значение 10 члена очереди. И присваивать так же можно.
We are hard at work… for you. :)
Developer
Ветеран
Сообщения: 551
Зарегистрирован: 26 Март 2012, 17:18

List Data to String Parsing

Сообщение Developer »

Вот, оказывается, мой-же вопрос, заданный ранее Игорем Столяровым в 2015 году viewtopic.php?f=1&t=3540- ответ от Rafael-я :wink:

Вот только проблема:


Объявлена переменная типа LIST с именем ?List

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

WINDOW                   WINDOW('Window'),CENTER,GRAY,IMM,SYSTEM,MAX,ALRT(F5Key),TOOLBOX,  DOUBLE
                               LIST,AT(10,100),USE(?List),VSCROLL
                    END 
в переменную ?List динамически попадает информация сформированная сторонним классом.

Как получить значение определённого элемента переменной в сформированной структуре LIST переменной ?List :?:

Выражение LOC:CurrentValue = WHAT(?List,1) вызывает ошибку: "No matching prototype available"

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

List Data to String Parsing

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

Developer писал(а): 11 Сентябрь 2018, 21:40LOC:CurrentValue = WHAT(?List,1)
Я возьму на себя смелось ответить на это по пунктам …

1. Вообще, конечно, должно быть понимание, что ?LIST - это просто номер интерфейсного элемента внутри WINDOW …
И к нему нельзя применять операции для работы с структурированными типами данных.

2. Обязательным параметром LIST, является FROM - источник данных для списка, которого в Вашем примере просто нет.

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

   LIST,AT(80,0,20,20),USE(?List),FROM(MyQUEUE),FORMAT('5C~List~15L~Box~')
Так вот, правильно будет:

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

   LOC:CurrentValue = WHAT(MyQUEUE,1)
   LOC:CurrentValue = WHAT(?List{Prop:From},1)
3. Вы путаете две вещи. Упрощённо говоря: есть ящик (экранная структура ?List) и его содержимое (То, что указано в FROM()).
Ранее я показал в примере, как получить параметры самого "ящика" по его экранной метке ?List.
Kreator рассказал, как получить / изменять информацию об элементах содержимого структуры LIST.
Но это - две большие разницы … Совсем. :)
За теми кто отстал - не возвращаться. (С) Кодекс
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

List Data to String Parsing

Сообщение kreator »

Developer писал(а): 11 Сентябрь 2018, 21:40в переменную ?List динамически попадает информация сформированная сторонним классом.
Подозреваю, задача нетривиальная. Формат этого листа известен? От формата зависит содержимое очереди (отдельные переменные для цветов, стилей). Надо ещё парсить формат листа.
We are hard at work… for you. :)
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

List Data to String Parsing

Сообщение kreator »

kreator писал(а): 12 Сентябрь 2018, 11:14
Developer писал(а): 11 Сентябрь 2018, 21:40в переменную ?List динамически попадает информация сформированная сторонним классом.
Подозреваю, задача нетривиальная. Формат этого листа известен? От формата зависит содержимое очереди (отдельные переменные для цветов, стилей). Надо ещё парсить формат листа.
А если ещё порядок элементов листа не совпадает с порядком элементов очереди?
We are hard at work… for you. :)
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3131
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

List Data to String Parsing

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

Игорь Столяров писал(а): 12 Сентябрь 2018, 6:24 Так вот, правильно будет:

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

   LOC:CurrentValue = WHAT(MyQUEUE,1)
   LOC:CurrentValue = WHAT(?List{Prop:From},1)
Так вот неправильно ни разу, и даже не скомпилируется.
С уважением, ДП
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7330
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

List Data to String Parsing

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

Упс ! :shock:
За теми кто отстал - не возвращаться. (С) Кодекс
Developer
Ветеран
Сообщения: 551
Зарегистрирован: 26 Март 2012, 17:18

List Data to String Parsing

Сообщение Developer »

Так вот, HeaderValue = ?List{PROPLIST:Header, Loc:xCount} - работает, но с помощью ?List{PROPLIST:XXX, XXX} без проблем получаем свойства (атрибуты) элементов ?List, а необходимо получить значение содержимого элементов ?List.
С Уважением, Developer
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

List Data to String Parsing

Сообщение kreator »

Игорь Столяров писал(а): 12 Сентябрь 2018, 11:30 Упс ! :shock:
Свойство "Write-only". И, похоже, нет путей получить очередь только зная контрол.
Developer писал(а): 11 Сентябрь 2018, 21:40 в переменную ?List динамически попадает информация сформированная сторонним классом.
Видимо, придётся покопать в направлении стороннего класса.
We are hard at work… for you. :)
Ответить