List Data to String Parsing
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
List Data to String Parsing
Привет всем!
Есть ли возможность присвоить (распарсить) динамическое содержимое элементов List в переменные типа STRING (CSTRING) без отображения в Browse?
Есть ли возможность получить значение конкретного элемента?
Есть ли возможность присвоить (распарсить) динамическое содержимое элементов List в переменные типа STRING (CSTRING) без отображения в Browse?
Есть ли возможность получить значение конкретного элемента?
С Уважением, Developer
-
- ✯ Ветеран ✯
- Сообщения: 5158
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 11 раз
- Поблагодарили: 26 раз
List Data to String Parsing
Переведите. Ничего непонятно. Или напомнить о функциях what, who, where?
We are hard at work… for you. 

- Игорь Столяров
- Ветеран движения
- Сообщения: 8028
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 96 раз
List Data to String Parsing
Да, немного не формализован вопрос … Здесь бы сначала определиться с терминологией.
LIST - базовый элемент интерфейса для списков;
BROWSE - формируемая шаблонами структура списка, состоящая из LIST, View, Files и т.д.
Т.е. в общем случае, для работы с содержимым LIST никакой BROWSE не нужен.
Если мы хотим разобрать структуру LIST, то просто работаем с ней напрямую.
Здесь хороший пример - это менеджер форматов списков (хотя в стандартных шаблонах он убогий)
Упрощённый пример разбора структуры LIST:
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
Make Clarion Great Again ! 
List Data to String Parsing
Kreator и Игорь Столяров спасибо за отклик и за правильные замечания.kreator писал(а): 09 Сентябрь 2018, 18:25Переведите. Ничего непонятно. Или напомнить о функциях what, who, where?

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

Kreator, а как применить what, who, where - к List (как на примере Игоря Столярова (Упрощённый пример разбора структуры LIST:)) - приведи, пожалуйста, рабочий пример применительно к List
С Уважением, Developer
-
- ✯ Ветеран ✯
- Сообщения: 5158
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 11 раз
- Поблагодарили: 26 раз
List Data to String Parsing
what, who, where к очереди применяются. Удобно оперировать номерами переменных в очереди, а не их наименованиями.
LOC:CurrentField &= WHAT(LOC:Queue,10) достаёт значение 10 члена очереди. И присваивать так же можно.
LOC:CurrentField &= WHAT(LOC:Queue,10) достаёт значение 10 члена очереди. И присваивать так же можно.
We are hard at work… for you. 

List Data to String Parsing
Вот, оказывается, мой-же вопрос, заданный ранее Игорем Столяровым в 2015 году viewtopic.php?f=1&t=3540- ответ от Rafael-я
Вот только проблема:
Объявлена переменная типа LIST с именем ?List
в переменную ?List динамически попадает информация сформированная сторонним классом.
Как получить значение определённого элемента переменной в сформированной структуре LIST переменной ?List
Выражение LOC:CurrentValue = WHAT(?List,1) вызывает ошибку: "No matching prototype available"
Пожалуйста, подскажите решение.

Вот только проблема:
Объявлена переменная типа LIST с именем ?List
Код: Выделить всё
WINDOW WINDOW('Window'),CENTER,GRAY,IMM,SYSTEM,MAX,ALRT(F5Key),TOOLBOX, DOUBLE
LIST,AT(10,100),USE(?List),VSCROLL
END
Как получить значение определённого элемента переменной в сформированной структуре LIST переменной ?List

Выражение LOC:CurrentValue = WHAT(?List,1) вызывает ошибку: "No matching prototype available"
Пожалуйста, подскажите решение.
С Уважением, Developer
- Игорь Столяров
- Ветеран движения
- Сообщения: 8028
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 96 раз
List Data to String Parsing
Я возьму на себя смелось ответить на это по пунктам …
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)
Ранее я показал в примере, как получить параметры самого "ящика" по его экранной метке ?List.
Kreator рассказал, как получить / изменять информацию об элементах содержимого структуры LIST.
Но это - две большие разницы … Совсем.

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

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

- Дед Пахом
- Старичок
- Сообщения: 3288
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 15 раз
- Поблагодарили: 49 раз
- Контактная информация:
List Data to String Parsing
Так вот неправильно ни разу, и даже не скомпилируется.Игорь Столяров писал(а): 12 Сентябрь 2018, 6:24 Так вот, правильно будет:Код: Выделить всё
LOC:CurrentValue = WHAT(MyQUEUE,1) LOC:CurrentValue = WHAT(?List{Prop:From},1)
С уважением, ДП
- Игорь Столяров
- Ветеран движения
- Сообщения: 8028
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 96 раз
List Data to String Parsing
Так вот, HeaderValue = ?List{PROPLIST:Header, Loc:xCount} - работает, но с помощью ?List{PROPLIST:XXX, XXX} без проблем получаем свойства (атрибуты) элементов ?List, а необходимо получить значение содержимого элементов ?List.
С Уважением, Developer
-
- ✯ Ветеран ✯
- Сообщения: 5158
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 11 раз
- Поблагодарили: 26 раз
List Data to String Parsing
Свойство "Write-only". И, похоже, нет путей получить очередь только зная контрол.
Видимо, придётся покопать в направлении стороннего класса.Developer писал(а): 11 Сентябрь 2018, 21:40 в переменную ?List динамически попадает информация сформированная сторонним классом.
We are hard at work… for you. 
