cJSON: Рабочие вопросы при работе с классом
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
- Игорь Столяров
- Ветеран движения
- Сообщения: 7404
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 16 раз
- Поблагодарили: 49 раз
cJSON: Рабочие вопросы при работе с классом
Добрый день !
Подскажите пожалуйста: можно ли сделать индикацию процесса выполнения
для методов ToGroup / ToQueue и процедур json::CreateObject / json::CreateArray ?
Скорость работы класса нормальная, это вопрос индикации разбора больших данных.
Иначе программа находится некоторое время (минуты) в состоянии подвиса.
В общем случае, даже не нужен развёрнутый вариант решения как ParseCallback() ...
Вполне достаточно заполнения PROGRESS,RANGE(0,100), если указана экранная
метка индикатора (в переменной класса или опциональном параметре процедуры).
Как вариант. Спасибо !
Подскажите пожалуйста: можно ли сделать индикацию процесса выполнения
для методов ToGroup / ToQueue и процедур json::CreateObject / json::CreateArray ?
Скорость работы класса нормальная, это вопрос индикации разбора больших данных.
Иначе программа находится некоторое время (минуты) в состоянии подвиса.
В общем случае, даже не нужен развёрнутый вариант решения как ParseCallback() ...
Вполне достаточно заполнения PROGRESS,RANGE(0,100), если указана экранная
метка индикатора (в переменной класса или опциональном параметре процедуры).
Как вариант. Спасибо !
За теми кто отстал - не возвращаться. (С) Кодекс
- Дед Пахом
- Старичок
- Сообщения: 3136
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 11 раз
- Поблагодарили: 31 раз
- Контактная информация:
cJSON: Рабочие вопросы при работе с классом
В принципе и сейчас всё для этого есть: можно использовать метод TCJsonRuleHelper.FindCB, он вызывается для каждого поля структуры. Алгоритм видится таким:
- Знаем размер очереди (прогресс=100%)
- В FindCB каждый раз, когда переданное имя совпадает с первым полем структуры, инкрементируем счётчик.
- Знаем размер очереди (прогресс=100%)
- В FindCB каждый раз, когда переданное имя совпадает с первым полем структуры, инкрементируем счётчик.
С уважением, ДП
- Игорь Столяров
- Ветеран движения
- Сообщения: 7404
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 16 раз
- Поблагодарили: 49 раз
cJSON: Рабочие вопросы при работе с классом
Игорь всё сделал, но у него смешанное чувство.
Да, индикатор отрабатывает наполовину ... и снова подвисает секунд на 30.
Видимо после разбора TCJsonRuleHelper.FindCB() идёт ещё какая-то обработка ...
- Вложения
-
- test.zip
- (421.69 КБ) 46 скачиваний
За теми кто отстал - не возвращаться. (С) Кодекс
- Admin
- Администратор
- Сообщения: 3962
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 27 раз
- Поблагодарили: 22 раза
- Контактная информация:
cJSON: Рабочие вопросы при работе с классом
Первый раз прогресс что то грузит пакет.Игорь Столяров писал(а): ↑09 Январь 2023, 23:36 Да, индикатор отрабатывает наполовину ... и снова подвисает секунд на 30.
Потом заголовок меняется на очередь и градусник нормально до конца пробегает.
Далее окно висит несколько минут... очень медленно что то делается с нагрузкой в 50% проца.
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
- Игорь Столяров
- Ветеран движения
- Сообщения: 7404
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 16 раз
- Поблагодарили: 49 раз
cJSON: Рабочие вопросы при работе с классом
У Вас видимо старый релиз класса - сейчас всё быстрей делается.
Но конечно, (очень) хотелось бы что бы все вышли из сумрака и показать выполнение процесса загрузки в ToQueue().
За теми кто отстал - не возвращаться. (С) Кодекс
- Admin
- Администратор
- Сообщения: 3962
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 27 раз
- Поблагодарили: 22 раза
- Контактная информация:
cJSON: Рабочие вопросы при работе с классом
Только утром скачал репу. Надеюсь там свежак.
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
- Дед Пахом
- Старичок
- Сообщения: 3136
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 11 раз
- Поблагодарили: 31 раз
- Контактная информация:
cJSON: Рабочие вопросы при работе с классом
FindCB не подходит для индикации, надо делать отдельный колбэк.Игорь Столяров писал(а): ↑09 Январь 2023, 23:36 Видимо после разбора TCJsonRuleHelper.FindCB() идёт ещё какая-то обработка ..
С уважением, ДП
- Дед Пахом
- Старичок
- Сообщения: 3136
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 11 раз
- Поблагодарили: 31 раз
- Контактная информация:
cJSON: Рабочие вопросы при работе с классом
Пока остановился на таком варианте: колбэк только для обработки массивов, вызывается после добавления записи очереди в json-массив или наоборот, добавления элемента json-массива в очередь. То есть и в json::CreateArray, и в cJSON.ToQueue.
Скачать на нашем ftp: /cjson/1.37.1/
Попутно, есть возможность прервать обработку массива по каким-то причинам, вернув FALSE (см. пример ниже).
Также есть вероятность, что колбэк будет вызван для разных массивов (для случаев очередей в очередях), поэтому передаётся ссылка на обрабатываемый json массив, его можно сравнить с корневым объектом (см. пример ниже).
Параметр pRules передаётся просто так, чтобы как-то оправдать имя класса TCJsonRuleHelper, в котором этот колбэк объявлен.
Декларация:
Реализация:
Скачать на нашем ftp: /cjson/1.37.1/
Попутно, есть возможность прервать обработку массива по каким-то причинам, вернув FALSE (см. пример ниже).
Также есть вероятность, что колбэк будет вызван для разных массивов (для случаев очередей в очередях), поэтому передаётся ссылка на обрабатываемый json массив, его можно сравнить с корневым объектом (см. пример ниже).
Параметр pRules передаётся просто так, чтобы как-то оправдать имя класса TCJsonRuleHelper, в котором этот колбэк объявлен.
Декларация:
Код: Выделить всё
rh CLASS(TCJsonRuleHelper)
ArrayItemCB PROCEDURE(LONG pArraySize, LONG pCurrentIndex, CONST *cJSON pArray, *typCJsonFieldRules pRules), BOOL, VIRTUAL
END
Код: Выделить всё
rh.ArrayItemCB PROCEDURE(LONG pArraySize, LONG pCurrentIndex, CONST *cJSON pArray, *typCJsonFieldRules pRules)
newPercent LONG, AUTO
CODE
IF pArray &= Root
newPercent = (pCurrentIndex * 100 / pArraySize)
IF newPercent > curPercent
curPercent = newPercent
xProgress{Prop:Progress} = curPercent
! printd('rh.ArrayItemCB(%i, %i): progress %i%%', pArraySize, pCurrentIndex, curPercent)
END
! !- 100 records limit
! IF pCurrentIndex = 100
! RETURN FALSE
! END
END
RETURN TRUE
С уважением, ДП
- Игорь Столяров
- Ветеран движения
- Сообщения: 7404
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 16 раз
- Поблагодарили: 49 раз
cJSON: Рабочие вопросы при работе с классом
Это очень интересное решение !
Попробую с его помощью задушить вывод конструкций типа "array":[1,2,3,4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,]
За теми кто отстал - не возвращаться. (С) Кодекс
- Дед Пахом
- Старичок
- Сообщения: 3136
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 11 раз
- Поблагодарили: 31 раз
- Контактная информация:
cJSON: Рабочие вопросы при работе с классом
Update ftp: /cjson/1.37.2/
Изменения (вряд ли Вам менять в сотне мест):
1. Поменял имя метода на более соответствующее "ArrayCB".
2. Добавил параметр pQueueInstance, чтобы можно было определить, какая очередь обрабатывается.
3. Добавил вызов колбэка в json::CreateArray(FILE), json::CreateSimpleArray(QUEUE) и cJSON.ToFile(FILE). Не вижу (пока) необходимости добавлять в json::CreateDoubleArray, json::CreateIntArray, json::CreateStringArray.
Изменения (вряд ли Вам менять в сотне мест):
1. Поменял имя метода на более соответствующее "ArrayCB".
2. Добавил параметр pQueueInstance, чтобы можно было определить, какая очередь обрабатывается.
3. Добавил вызов колбэка в json::CreateArray(FILE), json::CreateSimpleArray(QUEUE) и cJSON.ToFile(FILE). Не вижу (пока) необходимости добавлять в json::CreateDoubleArray, json::CreateIntArray, json::CreateStringArray.
С уважением, ДП
- Игорь Столяров
- Ветеран движения
- Сообщения: 7404
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 16 раз
- Поблагодарили: 49 раз
cJSON: Рабочие вопросы при работе с классом
Это специфические выгрузки - у нас пока не было задачи их задействовать.
А всё остальное - в работу !
За теми кто отстал - не возвращаться. (С) Кодекс
- Игорь Столяров
- Ветеран движения
- Сообщения: 7404
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 16 раз
- Поблагодарили: 49 раз
cJSON: Рабочие вопросы при работе с классом
Вообще нет передачи управления в ArrayCB() и очень смущает аттрибут VIRTUAL ...
Последний раз редактировалось Игорь Столяров 10 Январь 2023, 13:49, всего редактировалось 1 раз.
За теми кто отстал - не возвращаться. (С) Кодекс
- Игорь Столяров
- Ветеран движения
- Сообщения: 7404
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 16 раз
- Поблагодарили: 49 раз
cJSON: Рабочие вопросы при работе с классом
Игорь понял. Всё работает супер !
Код: Выделить всё
rh Class(TCJsonRuleHelper)
ArrayCB Procedure(LONG pArraySize, LONG pCurrentIndex, CONST *cJSON pArray, LONG pQueueInstance, *typCJsonFieldRules pRules), Bool, Derived
end
За теми кто отстал - не возвращаться. (С) Кодекс
- Игорь Столяров
- Ветеран движения
- Сообщения: 7404
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 16 раз
- Поблагодарили: 49 раз
cJSON: Рабочие вопросы при работе с классом
SOS !!!
В крайнем релизе отвалилась ВЫГРУЗКА файлов.
Если для пустого поля включена опция "IsFile", то программу вышибает конкретно.
Пример прилагаю, посмотрите пожалуйста.
В крайнем релизе отвалилась ВЫГРУЗКА файлов.
Если для пустого поля включена опция "IsFile", то программу вышибает конкретно.
Пример прилагаю, посмотрите пожалуйста.
Последний раз редактировалось Игорь Столяров 10 Январь 2023, 20:05, всего редактировалось 1 раз.
За теми кто отстал - не возвращаться. (С) Кодекс
- Дед Пахом
- Старичок
- Сообщения: 3136
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 11 раз
- Поблагодарили: 31 раз
- Контактная информация:
cJSON: Рабочие вопросы при работе с классом
Если бы Вы попробовали выгрузить реальный файл (например qList:fileinbase64_01 = 'ParseJSON.clw'), то увидели бы, что IsFile прекрасно работает, а дело в json::LoadFile, которую я сломал (возвращает мусор вместо пустой строки, если файл не найден).
Починил, v1.37.3 на FTP.
Починил, v1.37.3 на FTP.
С уважением, ДП