Два вопроса по Queue
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 4615
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 6 раз
- Поблагодарили: 37 раз
Два вопроса по Queue
Не могу представить, зачем такое надо может быть. А если надо, то кто мешает свою функцию написать.
C6/C11, ШВС, tps/btrieve.
-
- ✯ Ветеран ✯
- Сообщения: 4983
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 7 раз
- Поблагодарили: 20 раз
Два вопроса по Queue
Надо так и сделать. Раз гора никуда не идёт . Наверняка ещё где-нибудь пригодится. Игорь Столяров, у Вас есть такая универсальная функция? Не поделитесь с народом?
We are hard at work… for you.
- Admin
- Администратор
- Сообщения: 3959
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 25 раз
- Поблагодарили: 22 раза
- Контактная информация:
Два вопроса по Queue
Да нет смысла в этой функции.
А если два поля сравнить нужно, сложное условие и т.д.
Можно подумать вам сотни раз нужно количество по условию считать.
Вообще не помню ни одного случая когда нужно посчитать количество записей по условию без их обработки, т.е. без того что в функцию вы не передадите.
А если два поля сравнить нужно, сложное условие и т.д.
Можно подумать вам сотни раз нужно количество по условию считать.
Вообще не помню ни одного случая когда нужно посчитать количество записей по условию без их обработки, т.е. без того что в функцию вы не передадите.
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
- Admin
- Администратор
- Сообщения: 3959
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 25 раз
- Поблагодарили: 22 раза
- Контактная информация:
Два вопроса по Queue
Что нибудь такое?
Код: Выделить всё
PROGRAM
MAP
END
QueueFunc CLASS,TYPE
CountStr PROCEDURE(*QUEUE Q, STRING Field, STRING Value, BYTE CS=TRUE),LONG
CountSubstr PROCEDURE(*QUEUE Q, STRING Field, STRING Value, BYTE CS=TRUE),LONG
CountNum PROCEDURE(*QUEUE Q, STRING Field, LONG Value),LONG
CountNum PROCEDURE(*QUEUE Q, STRING Field, LONG Value1, LONG Value2),LONG
GetField PROCEDURE(*QUEUE Q, STRING Field),*ANY
END
QF QueueFunc
TestQueue QUEUE
Field1 LONG
Field2 LONG
Field3 STRING(100)
Field4 STRING(100)
END
CODE
LOOP W# = 1 TO 10000
CLEAR(TestQueue)
TestQueue.Field1 = W#
TestQueue.Field2 = W#*100
TestQueue.Field3 = 'Some string #' & W#
LOOP 10 TIMES
TestQueue.Field4 = CLIP(TestQueue.Field4)&CHR(RANDOM(65,90))
END
ADD(TestQueue)
END
MESSAGE(QF.CountNum(TestQueue, 'Field1', 100, 112))
MESSAGE(QF.CountStr(TestQueue, 'Field3', 'some string #10', FALSE))
MESSAGE(QF.CountSubstr(TestQueue, 'Field4', 'ADA'))
! ============================================================================================
QueueFunc.CountStr PROCEDURE(*QUEUE Q, STRING Field, STRING Value, BYTE CS=TRUE)!,LONG
LOC:Pos LONG
LOC:Counter LONG
LOC:Field ANY
CODE
LOC:Counter = 0
GET(Q, 1)
IF ERRORCODE() THEN RETURN 0 END
LOC:Field &= SELF.GetField(Q, Field)
IF LOC:Field &= NULL
RETURN -1
END
LOOP LOC:Pos = 1 TO RECORDS(Q)
GET(Q, LOC:Pos)
IF (CS = TRUE AND CLIP(LOC:Field) = CLIP(Value)) OR |
(CS = FALSE AND UPPER(CLIP(LOC:Field)) = UPPER(CLIP(Value)))
LOC:Counter += 1
END
END
RETURN LOC:Counter
! ============================================================================================
QueueFunc.CountSubstr PROCEDURE(*QUEUE Q, STRING Field, STRING Value, BYTE CS=TRUE)!,LONG
LOC:Pos LONG
LOC:Counter LONG
LOC:Field ANY
CODE
LOC:Counter = 0
GET(Q, 1)
IF ERRORCODE() THEN RETURN 0 END
LOC:Field &= SELF.GetField(Q, Field)
IF LOC:Field &= NULL
RETURN -1
END
LOOP LOC:Pos = 1 TO RECORDS(Q)
GET(Q, LOC:Pos)
IF (CS = TRUE AND INSTRING(CLIP(Value),LOC:Field,1,1)) OR |
(CS = FALSE AND INSTRING(UPPER(CLIP(Value)),UPPER(LOC:Field),1,1))
LOC:Counter += 1
END
END
RETURN LOC:Counter
QueueFunc.CountNum PROCEDURE(*QUEUE Q, STRING Field, LONG Value)!,LONG
CODE
RETURN SELF.CountNum(Q, Field, Value, Value)
QueueFunc.CountNum PROCEDURE(*QUEUE Q, STRING Field, LONG Value1, LONG Value2)!,LONG
LOC:Pos LONG
LOC:Counter LONG
LOC:Field ANY
CODE
LOC:Counter = 0
GET(Q, 1)
IF ERRORCODE() THEN RETURN 0 END
LOC:Field &= SELF.GetField(Q, Field)
IF LOC:Field &= NULL
RETURN -1
END
LOOP LOC:Pos = 1 TO RECORDS(Q)
GET(Q, LOC:Pos)
IF LOC:Field >= Value1 AND LOC:Field <= Value2
LOC:Counter += 1
END
END
RETURN LOC:Counter
QueueFunc.GetField PROCEDURE(*QUEUE Q, STRING Field)!,*ANY
LOC:Index LONG
LOC:FieldName CSTRING(256)
LOC:AnyVar ANY
CODE
LOC:Index = 1
LOOP
LOC:FieldName = UPPER(WHO(Q, LOC:Index))
IF LEN(LOC:FieldName)
IF LOC:FieldName = UPPER(Field)
LOC:AnyVar &= WHAT(Q, LOC:Index)
RETURN LOC:AnyVar
END
LOC:Index += 1
ELSE
RETURN LOC:AnyVar
END
END
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
-
- ✯ Ветеран ✯
- Сообщения: 4983
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 7 раз
- Поблагодарили: 20 раз
Два вопроса по Queue
Может и нет смысла. В любом случае спасибо за класс. Выйду из отпуска посмотрю.
We are hard at work… for you.