Позиционирование в QUEUE

Clarion, Clarion 7

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

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
George
Активист
Сообщения: 100
Зарегистрирован: 04 Август 2009, 10:48

Позиционирование в QUEUE

Сообщение George »

kreator писал(а): 20 Май 2022, 16:14 George, почему не почитать справку? Сделайте в очереди именованные поля. И тогда:

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

Que:Name = 'Smith'                       !Initialize the key fields
Que:Zip = 12345
GET(NameQue,'FirstField,SecondField')    !Get the matching record
IF ERRORCODE() THEN STOP(ERROR()) END
Ещё можно сначала сделать set, потом один next.
Если я второму полю присвою конкретное значение, то и встанет на именно ту запись (если найдет подобную).
George
Активист
Сообщения: 100
Зарегистрирован: 04 Август 2009, 10:48

Позиционирование в QUEUE

Сообщение George »

kreator писал(а): 20 Май 2022, 16:14 George, почему не почитать справку? Сделайте в очереди именованные поля. И тогда:

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

Que:Name = 'Smith'                       !Initialize the key fields
Que:Zip = 12345
GET(NameQue,'FirstField,SecondField')    !Get the matching record
IF ERRORCODE() THEN STOP(ERROR()) END
Ещё можно сначала сделать set, потом один next.
1) Если четко определить и второе поле, то и встанет на такую запись (если найдет).
2) SET и NEXT для QUEUE?
George
Активист
Сообщения: 100
Зарегистрирован: 04 Август 2009, 10:48

Позиционирование в QUEUE

Сообщение George »

finsoftrz писал(а): 20 Май 2022, 16:08 Можно еще служебную строку воткнуть с минимальным значением суммы.
Этот вариант был бы хорош, если потом мне не нужно было бы все равно искать строку с наименьшей суммой.
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3131
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

Позиционирование в QUEUE

Сообщение Дед Пахом »

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

  KOL::Kod = 1
  MAX::Kod = KOL::Kod
  GET(Queue:Max,MAX::Kod)
  MESSAGE(MAX::Summa)   ! результат 50

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

  KOL::Kod = 2
  MAX::Kod = KOL::Kod
  GET(Queue:Max,MAX::Kod)
  MESSAGE(MAX::Summa)   ! результат 12
С уважением, ДП
George
Активист
Сообщения: 100
Зарегистрирован: 04 Август 2009, 10:48

Позиционирование в QUEUE

Сообщение George »

Дед Пахом писал(а): 20 Май 2022, 17:10

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

  KOL::Kod = 1
  MAX::Kod = KOL::Kod
  GET(Queue:Max,MAX::Kod)
  MESSAGE(MAX::Summa)   ! результат 50

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

  KOL::Kod = 2
  MAX::Kod = KOL::Kod
  GET(Queue:Max,MAX::Kod)
  MESSAGE(MAX::Summa)   ! результат 12
К сожалению, я не понял Ваши примеры.
Общая задача такая - есть набор сумм, необходимо отобрать из этого набора 5 наибольших.
Естественно, первоначальный набор не упорядочен и не может быть упорядочен в принципе.
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3131
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

Позиционирование в QUEUE

Сообщение Дед Пахом »

George писал(а): 20 Май 2022, 17:16 К сожалению, я не понял Ваши примеры.
Это как раз Ваши примеры. Я заполнил очередь теми данными, что Вы привели, в том же порядке.
С уважением, ДП
George
Активист
Сообщения: 100
Зарегистрирован: 04 Август 2009, 10:48

Позиционирование в QUEUE

Сообщение George »

Дополнительно - 5 наибольших по коду 1, 5 наибольших по коду 2 и т.д.
George
Активист
Сообщения: 100
Зарегистрирован: 04 Август 2009, 10:48

Позиционирование в QUEUE

Сообщение George »

Дед Пахом писал(а): 20 Май 2022, 17:18
George писал(а): 20 Май 2022, 17:16 К сожалению, я не понял Ваши примеры.
Это как раз Ваши примеры. Я заполнил очередь теми данными, что Вы привели, в том же порядке.
KOL::Kod = 1
MAX::Kod = KOL::Kod
GET(Queue:Max,MAX::Kod)
MESSAGE(MAX::Summa) ! результат 50
Нет, такой вариант не работает.
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3131
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

Позиционирование в QUEUE

Сообщение Дед Пахом »

George писал(а): 20 Май 2022, 17:22 Нет, такой вариант не работает.
Работает, могу доказать.
С уважением, ДП
George
Активист
Сообщения: 100
Зарегистрирован: 04 Август 2009, 10:48

Позиционирование в QUEUE

Сообщение George »

Дед Пахом писал(а): 20 Май 2022, 17:24
George писал(а): 20 Май 2022, 17:22 Нет, такой вариант не работает.
Работает, могу доказать.
Тогда почему у меня не работает? Я попробовал :)
George
Активист
Сообщения: 100
Зарегистрирован: 04 Август 2009, 10:48

Позиционирование в QUEUE

Сообщение George »

В Вашем варианте, по логике, встанет на первую попавшуюся запись с MAX::Kod = 1
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3131
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

Позиционирование в QUEUE

Сообщение Дед Пахом »

George писал(а): 20 Май 2022, 17:29 В Вашем варианте, по логике, встанет на первую попавшуюся запись с MAX::Kod = 1
Почему-то первая попавшаяся всегда с MAX::Summa=50.
С уважением, ДП
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3131
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

Позиционирование в QUEUE

Сообщение Дед Пахом »

George писал(а): 20 Май 2022, 17:28 Тогда почему у меня не работает? Я попробовал
Напишите минимальную тестовую программу. У меня получилось 54 строчки считая пустые.
С уважением, ДП
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4561
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Позиционирование в QUEUE

Сообщение finsoftrz »

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

form_r  routine
   DATA
lor:queue queue, pre()
lor:kod  long
lor:sum  real
.
   CODE
        
     lor:kod=1
     lor:sum=100
     add(lor:queue)
        
     lor:kod=1
     lor:sum=50
     add(lor:queue)     
        
     lor:kod=2
     lor:sum=100
     add(lor:queue)
        
     lor:kod=2
     lor:sum=49.2
     add(lor:queue)              
        
     lor:kod=2
     lor:sum=50
     add(lor:queue)      
        
     sort(lor:queue,lor:kod,lor:sum)
        
     lor:kod=2
     get(lor:queue,lor:kod)
     stop(lor:sum)   
В этом примере работает, выдает значение 49.2. А не может это от версии клариона зависеть? Я на с6 пробую.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3131
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

Позиционирование в QUEUE

Сообщение Дед Пахом »

finsoftrz писал(а): 20 Май 2022, 17:38 Я на с6 пробую.
Я на последней.
С уважением, ДП
Ответить