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

List Data to String Parsing

Добавлено: 08 Сентябрь 2018, 23:00
Developer
Привет всем!

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

Есть ли возможность получить значение конкретного элемента?

List Data to String Parsing

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

List Data to String Parsing

Добавлено: 10 Сентябрь 2018, 9:21
Игорь Столяров
Да, немного не формализован вопрос … Здесь бы сначала определиться с терминологией.
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

List Data to String Parsing

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

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

Kreator, а как применить what, who, where - к List (как на примере Игоря Столярова (Упрощённый пример разбора структуры LIST:)) - приведи, пожалуйста, рабочий пример применительно к List

List Data to String Parsing

Добавлено: 11 Сентябрь 2018, 12:21
kreator
what, who, where к очереди применяются. Удобно оперировать номерами переменных в очереди, а не их наименованиями.
LOC:CurrentField &= WHAT(LOC:Queue,10) достаёт значение 10 члена очереди. И присваивать так же можно.

List Data to String Parsing

Добавлено: 11 Сентябрь 2018, 21:40
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"

Пожалуйста, подскажите решение.

List Data to String Parsing

Добавлено: 12 Сентябрь 2018, 6:24
Игорь Столяров
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.
Но это - две большие разницы … Совсем. :)

List Data to String Parsing

Добавлено: 12 Сентябрь 2018, 11:14
kreator
Developer писал(а): 11 Сентябрь 2018, 21:40в переменную ?List динамически попадает информация сформированная сторонним классом.
Подозреваю, задача нетривиальная. Формат этого листа известен? От формата зависит содержимое очереди (отдельные переменные для цветов, стилей). Надо ещё парсить формат листа.

List Data to String Parsing

Добавлено: 12 Сентябрь 2018, 11:27
kreator
kreator писал(а): 12 Сентябрь 2018, 11:14
Developer писал(а): 11 Сентябрь 2018, 21:40в переменную ?List динамически попадает информация сформированная сторонним классом.
Подозреваю, задача нетривиальная. Формат этого листа известен? От формата зависит содержимое очереди (отдельные переменные для цветов, стилей). Надо ещё парсить формат листа.
А если ещё порядок элементов листа не совпадает с порядком элементов очереди?

List Data to String Parsing

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

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

   LOC:CurrentValue = WHAT(MyQUEUE,1)
   LOC:CurrentValue = WHAT(?List{Prop:From},1)
Так вот неправильно ни разу, и даже не скомпилируется.

List Data to String Parsing

Добавлено: 12 Сентябрь 2018, 11:30
Игорь Столяров
Упс ! :shock:

List Data to String Parsing

Добавлено: 12 Сентябрь 2018, 13:13
Developer
Так вот, HeaderValue = ?List{PROPLIST:Header, Loc:xCount} - работает, но с помощью ?List{PROPLIST:XXX, XXX} без проблем получаем свойства (атрибуты) элементов ?List, а необходимо получить значение содержимого элементов ?List.

List Data to String Parsing

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