Два вопроса по Queue

Clarion, Clarion 7

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

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Аскер
Новичок
Сообщения: 6
Зарегистрирован: 23 Июль 2017, 17:55

Два вопроса по Queue

Сообщение Аскер »

Всем привет!
Помогите разобраться с очередями!
Вопрос первый. Как организовать цикл по записям очереди 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

Сообщение Admin »

А задачу в целом описать можете, а то 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

Сообщение Admin »

По второму вопросу можно завести ссылку на очередь. Почитайте справку по "Reference Variables"
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Аскер
Новичок
Сообщения: 6
Зарегистрирован: 23 Июль 2017, 17:55

Два вопроса по Queue

Сообщение Аскер »

Admin писал(а): 24 Июль 2017, 2:45А задачу в целом описать можете, а то 64 очереди это как то сильно!
На окне размещены 64 списка данных по кодонам (единицам генетического кода) привязанных к своим соответствующим очередям, данные которых рассчитываются динамически во время открытия этого окна.
Аскер
Новичок
Сообщения: 6
Зарегистрирован: 23 Июль 2017, 17:55

Два вопроса по Queue

Сообщение Аскер »

Спасибо, Admin, за помощь!
Код примера очень наглядный и работоспособный!
Но все равно остался вопрос, что значит конструкция Get(Очередь, ключ)? Как ею пользоваться?
Аватара пользователя
Admin
Администратор
Сообщения: 3959
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 25 раз
Поблагодарили: 22 раза
Контактная информация:

Два вопроса по Queue

Сообщение Admin »

Аскер писал(а): 24 Июль 2017, 8:01Но все равно остался вопрос, что значит конструкция Get(Очередь, ключ)? Как ею пользоваться?
Поиск записи. В "ключевое" поле заносим что то и делаем GET по полю.
В примере же, есть.
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Аватара пользователя
Admin
Администратор
Сообщения: 3959
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 25 раз
Поблагодарили: 22 раза
Контактная информация:

Два вопроса по Queue

Сообщение Admin »

Ахаха. У меня тоже вопрос с к спецам. А на кой черт у нас есть такой GET? Я про + и -

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

GET(QUEUE,+Q:Field1,+Q:Field2)
Из доки только одно видно что последующая сортировка по этим полям будет быстрее.
В исходниках Clarion примеров использования почти нет. А где есть они непонятны.
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

Два вопроса по Queue

Сообщение Yufil »

Я всегда считал, что +Field отправляет на первую запись по ключу, а -Field - на последнюю. И никогда не доверял этой функции :)
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

Два вопроса по Queue

Сообщение kreator »

Аскер писал(а): 24 Июль 2017, 8:01 Но все равно остался вопрос, что значит конструкция Get(Очередь, ключ)? Как ею пользоваться?
Это банальная конструкция типа "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. :)
gopstop2007
✯ Ветеран ✯
Сообщения: 1702
Зарегистрирован: 25 Март 2009, 21:55
Благодарил (а): 9 раз
Поблагодарили: 4 раза

Два вопроса по Queue

Сообщение gopstop2007 »

Admin писал(а): 24 Июль 2017, 9:38 Ахаха. У меня тоже вопрос с к спецам. А на кой черт у нас есть такой GET? Я про + и -

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

GET(QUEUE,+Q:Field1,+Q:Field2)
Из доки только одно видно что последующая сортировка по этим полям будет быстрее.
В исходниках Clarion примеров использования почти нет. А где есть они непонятны.
По моему, так как в очереди ключей нет :), по этому для "ускорения" поиска можно осуществлять с конца очереди или с начала
при этом не забываем про SORT()
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
Аватара пользователя
Admin
Администратор
Сообщения: 3959
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 25 раз
Поблагодарили: 22 раза
Контактная информация:

Два вопроса по Queue

Сообщение Admin »

Yufil писал(а): 24 Июль 2017, 10:12Я всегда считал, что +Field отправляет на первую запись по ключу, а -Field - на последнюю. И никогда не доверял этой функции
При тестировании не получается. И с минусом и с плюсом отдает первую запись в очереди попадающую под условие.
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

Два вопроса по Queue

Сообщение kreator »

Чтобы не плодить ненужные темы, спрошу здесь. Есть какой-нибудь лайфхак посчитать количество записей в очереди по условию? По аналогии с записями по индексу файла/таблицы. Грубо - заменить энное количество циклов на records(бла-бла-бла).
We are hard at work… for you. :)
Аватара пользователя
Admin
Администратор
Сообщения: 3959
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 25 раз
Поблагодарили: 22 раза
Контактная информация:

Два вопроса по Queue

Сообщение Admin »

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

Два вопроса по Queue

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

kreator писал(а): 08 Июль 2019, 14:34посчитать количество записей в очереди по условию
Я недавно делал что-то похожее, но видимо это то, что Вы называете "энное количество циклов". Точнее цикла всего два.
Задача: есть неведомая очередь с неведомыми полями.
Нужно: посчитать кол-во записей с заданным значением в нужном поле. Т.е. RecordsCount# = GetMyQueue(Queue,'TOVAR','СОСИСЬКА')

Пробегаем по всем записям Queue, внутри по всем полям Queue. Через Who/What получаем имя поля и его значение.
Если имя поля и значение совпадает с искомым - увеличиваем счётчик. Всё. Работает везде - далее не заморачивался … :)
За теми кто отстал - не возвращаться. (С) Кодекс
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

Два вопроса по Queue

Сообщение kreator »

Игорь Столяров писал(а): 10 Июль 2019, 16:58 Я недавно делал что-то похожее, но видимо это то, что Вы называете "энное количество циклов". Точнее цикла всего два.
Это как организовать. Есть некая большая очередь. И надо считать количество записей согласно значению, скажем, одного поля. Не обязательно всю очередь просматривать. Просто для файлов/таблиц есть records по индексу/ключу. И меня не скорость волнует, а удобство. Одна функция вместо цикла. Для очереди ведь есть get по условному индексу. Почему records таким же образом нет? Додумались ведь как-то до этой функции records (по очереди).
We are hard at work… for you. :)
Ответить