Два вопроса по Queue
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Два вопроса по Queue
Всем привет!
Помогите разобраться с очередями!
Вопрос первый. Как организовать цикл по записям очереди MyQueue с полями Client, Param1, Param2, где заданы значения параметров Param1 и Param2, а надо получить список клиентов Client с данными параметрами? Я подозреваю, что надо использовать оператор GET(Очередь, ключ), но что такое ключ в очереди - не сумел постичь!
Второй вопрос касается работы с определенным множеством однотипных очередей: MyQueue1, MyQueue2... MyQueue64.
На сколько я понимаю, здесь в пору обратиться к операторам What-Where-Who. Но как динамически указывать первым параметром метки Очередей? Например, как согласно значению MyVal# (1-64) добавлять новые записи в эти 64 очереди?
Clarion 6
Помогите разобраться с очередями!
Вопрос первый. Как организовать цикл по записям очереди MyQueue с полями Client, Param1, Param2, где заданы значения параметров Param1 и Param2, а надо получить список клиентов Client с данными параметрами? Я подозреваю, что надо использовать оператор GET(Очередь, ключ), но что такое ключ в очереди - не сумел постичь!
Второй вопрос касается работы с определенным множеством однотипных очередей: MyQueue1, MyQueue2... MyQueue64.
На сколько я понимаю, здесь в пору обратиться к операторам What-Where-Who. Но как динамически указывать первым параметром метки Очередей? Например, как согласно значению MyVal# (1-64) добавлять новые записи в эти 64 очереди?
Clarion 6
- Admin
- Администратор
- Сообщения: 3959
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 25 раз
- Поблагодарили: 22 раза
- Контактная информация:
Два вопроса по Queue
А задачу в целом описать можете, а то 64 очереди это как то сильно!
По первому вопросу примерно так:
По первому вопросу примерно так:
Код: Выделить всё
dataqueue queue
clent string(100)
param1 long
param2 long
end
code
! сортируем для последовательного перебора и поиска
sort(dataqueue, dataqueue.param1, dataqueue.param2)
! будем искать запись с такими параметрами
dataqueue.param1 = 10
dataqueue.param2 = 2
! встаем на первую запись
get(dataqueue, dataqueue.param1, dataqueue.param2)
! нашли?
if not errorcode()
! перебираем с первой найденной записи
loop w# = position(dataqueue) to records(dataqueue)
! поулучить запись
get(dataqueue, w#)
! если закончились записи с нужными параметрами
if dataqueue.param1 <> 10 or dataqueue.param2 <> 2 then break end
! здесь перебираются нужные поля dataqueue.client
end
end
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
- Admin
- Администратор
- Сообщения: 3959
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 25 раз
- Поблагодарили: 22 раза
- Контактная информация:
Два вопроса по Queue
По второму вопросу можно завести ссылку на очередь. Почитайте справку по "Reference Variables"
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Два вопроса по Queue
На окне размещены 64 списка данных по кодонам (единицам генетического кода) привязанных к своим соответствующим очередям, данные которых рассчитываются динамически во время открытия этого окна.
Два вопроса по Queue
Спасибо, Admin, за помощь!
Код примера очень наглядный и работоспособный!
Но все равно остался вопрос, что значит конструкция Get(Очередь, ключ)? Как ею пользоваться?
Код примера очень наглядный и работоспособный!
Но все равно остался вопрос, что значит конструкция Get(Очередь, ключ)? Как ею пользоваться?
- Admin
- Администратор
- Сообщения: 3959
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 25 раз
- Поблагодарили: 22 раза
- Контактная информация:
Два вопроса по Queue
Поиск записи. В "ключевое" поле заносим что то и делаем GET по полю.
В примере же, есть.
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
- Admin
- Администратор
- Сообщения: 3959
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 25 раз
- Поблагодарили: 22 раза
- Контактная информация:
Два вопроса по Queue
Ахаха. У меня тоже вопрос с к спецам. А на кой черт у нас есть такой GET? Я про + и -
Из доки только одно видно что последующая сортировка по этим полям будет быстрее.
В исходниках Clarion примеров использования почти нет. А где есть они непонятны.
Код: Выделить всё
GET(QUEUE,+Q:Field1,+Q:Field2)
В исходниках Clarion примеров использования почти нет. А где есть они непонятны.
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Два вопроса по Queue
Я всегда считал, что +Field отправляет на первую запись по ключу, а -Field - на последнюю. И никогда не доверял этой функции
-
- ✯ Ветеран ✯
- Сообщения: 4961
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 6 раз
- Поблагодарили: 19 раз
Два вопроса по Queue
Это банальная конструкция типа "get(LOC:Queue, LOC:Queue.LOC:FirstField1, LOC:Queue.LOC:FirstField3, LOC:Queue.LOC:FirstField2)". Реальные названия переменных в очереди можно заменить на именованные поля, тогда по хелпу это "GET(queue,name)".
.
We are hard at work… for you.
-
- ✯ Ветеран ✯
- Сообщения: 1702
- Зарегистрирован: 25 Март 2009, 21:55
- Благодарил (а): 9 раз
- Поблагодарили: 4 раза
Два вопроса по Queue
По моему, так как в очереди ключей нет , по этому для "ускорения" поиска можно осуществлять с конца очереди или с началаAdmin писал(а): ↑24 Июль 2017, 9:38 Ахаха. У меня тоже вопрос с к спецам. А на кой черт у нас есть такой GET? Я про + и -Из доки только одно видно что последующая сортировка по этим полям будет быстрее.Код: Выделить всё
GET(QUEUE,+Q:Field1,+Q:Field2)
В исходниках Clarion примеров использования почти нет. А где есть они непонятны.
при этом не забываем про SORT()
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
- Admin
- Администратор
- Сообщения: 3959
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 25 раз
- Поблагодарили: 22 раза
- Контактная информация:
Два вопроса по Queue
При тестировании не получается. И с минусом и с плюсом отдает первую запись в очереди попадающую под условие.
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
-
- ✯ Ветеран ✯
- Сообщения: 4961
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 6 раз
- Поблагодарили: 19 раз
Два вопроса по Queue
Чтобы не плодить ненужные темы, спрошу здесь. Есть какой-нибудь лайфхак посчитать количество записей в очереди по условию? По аналогии с записями по индексу файла/таблицы. Грубо - заменить энное количество циклов на records(бла-бла-бла).
We are hard at work… for you.
- Admin
- Администратор
- Сообщения: 3959
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 25 раз
- Поблагодарили: 22 раза
- Контактная информация:
Два вопроса по Queue
Я такого не знаю. Да и не зачем по моему.
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
- Игорь Столяров
- Ветеран движения
- Сообщения: 7336
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 13 раз
- Поблагодарили: 48 раз
Два вопроса по Queue
Я недавно делал что-то похожее, но видимо это то, что Вы называете "энное количество циклов". Точнее цикла всего два.
Задача: есть неведомая очередь с неведомыми полями.
Нужно: посчитать кол-во записей с заданным значением в нужном поле. Т.е. RecordsCount# = GetMyQueue(Queue,'TOVAR','СОСИСЬКА')
Пробегаем по всем записям Queue, внутри по всем полям Queue. Через Who/What получаем имя поля и его значение.
Если имя поля и значение совпадает с искомым - увеличиваем счётчик. Всё. Работает везде - далее не заморачивался …
За теми кто отстал - не возвращаться. (С) Кодекс
-
- ✯ Ветеран ✯
- Сообщения: 4961
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 6 раз
- Поблагодарили: 19 раз
Два вопроса по Queue
Это как организовать. Есть некая большая очередь. И надо считать количество записей согласно значению, скажем, одного поля. Не обязательно всю очередь просматривать. Просто для файлов/таблиц есть records по индексу/ключу. И меня не скорость волнует, а удобство. Одна функция вместо цикла. Для очереди ведь есть get по условному индексу. Почему records таким же образом нет? Додумались ведь как-то до этой функции records (по очереди).Игорь Столяров писал(а): ↑10 Июль 2019, 16:58 Я недавно делал что-то похожее, но видимо это то, что Вы называете "энное количество циклов". Точнее цикла всего два.
We are hard at work… for you.