Main Библиотека функций rFunc
Версия 2.1.3 RC

    Библиотека представляет собой набор пользовательских (UDF) строковых, битовых, числовых функций, а также для работы с датами и BLOBами. А также ПАРСЕР, т.е. вычислитель выражений. Поддерживаются InterBase 4.2, 5.x, 6.0 (Windows, Linux), а также Firebird 1.x (Windows, Linux, FreeBSD) и Yaffil 1.x. В ее состав входит более 140 функций и "псевдофункций" (это когда несколько строковых UDF имеют одну базовую функцию, в основном это функции с именем LongXXXX). Библиотека написана на С++ и поставляется с исходными текстами.

Порядок компиляции и установки описан в файле readme.txt (readme.koi8) из состава дистрибутива.


функции

Условные обозначения:

Символ Тип параметра
f DOUBLE PRECISION
si SMALLINT
i INTEGER
d DATE для IB4.2 и IB5.x
TIMESTAMP для IB6 и выше
c CHAR(1)
c" CHAR(32)
c* VARCHAR(176)
s VARCHAR(255)
S VARCHAR(16383)
s' VARCHAR(8)
s" VARCHAR(31)
s"' VARCHAR(38)
S** VARCHAR(8127) для IB4.2
VARCHAR(16383) для IB5.x и выше
B BLOB

Функция Тип Версии Возвращает
IB* rFunc**
Числовые
Abs(f) f 4-7 1.0 Модуль числа
Ceil(f) f Минимальное большее целое
Floor(f) f Максимальное меньшее целое
MaxNum(f1, f2) f Большее из чисел
MinNum(f1, f2) f Меньшее из чисел
Power(f1, f2) f Число f1 в степени f2
Round(f, i) f 4-7 1.1 Округленное значение f до i знаков, причем при i>0 округляется дробная часть, а при i<0 - целая
SoftRound(f, i) f 4-7 1.5.0 Аналогично Round, но если результат округления равен 0, то округление не производится.
Z(f) f 4-7 1.3.0 Если параметр имеет значение NULL, то 0. Во всех остальных случаях возвращается то, что передается.
IIf(i1, i2, i3) i 4-7 1.3.0 Если i1=0, то i3, в остальных случаях - i2
DIf(i, f1, f2) f 4-7 1.3.0 Если i=0, то f2, в остальных случаях - f1
DZero(f1, f2, f3) f 4-7 1.3.0 Частное f1 и f2. Если f2=0, то возвращает f3.
CalcExpr(S1, S2)

Например:
CalcExpr('Sin( Pi*:p11/3)*:P2', 'P11=2;P2=10')
f 4-7 1.3.0
Простенький анализатор выражений.
Поддерживаемые функции и операции
+ - * /
Sin, Cos, tg, ctg, ArсCos, ArcSin, ArcTg, sh, ch, th,
exp, lh, lg, sqrt, sqr, abs(x1)
sgn(x1) - знак числа x1
log(x1,x2) - логарифм x1 по основанию x2
power(x1,x2) - возведение x1 в степень x2
if(expr, x1, x2) - если expr=0, то x2, иначе x1
Min(x1, ...) - минимум из чисел
Max(x1, ...) - максимум из чисел
Sum(x1, ...) - суммирование аргументов
Avg(x1, ...) - среднее арифметическое
Pi - число Pi.

     Для использования переменных в выражении - перед ними ставится двоеточие, и они описываются во втором параметре (см. пример).
ExprIsValid(S1, S2) i 4-7 1.3.0 Проверка на корректность заданного выражения. Возвращает 0, если все правильно, иначе - код ошибки.
Div(i1, i2) i 4-7 1.5.0 Целое частное i1 и i2
Mod(i1, i2) i 4-7 1.5.0 Остаток от деления i1 на i2
InitRandom(i) i 4-7 2.0.0 Инициализация генератора псевдослучайных чисел.
GetRandom(i) i 4-7 2.0.0 Псевдослучайное число в диапазоне 0..i.
IEqual(i1, i2) i 4-7 2.1.1 Проверка на равенство (1 означает "равно")
Sign(f) si 4-7 2.1.1 Знак числа (-1 если f<0, 0 если f=0, 1 если f>0).
Sqrt(f) f 4-7 2.1.3 Квадратный корень числа
Exp(f) f 4-7 2.1.3 Константа e возведенная в степень f
Log(f1, f2) f 4-7 2.1.3 Логарифм числа f1 по основанию f2
Log10(f) f 4-7 2.1.3 Десятичный логарифм числа
Ln(f) f 4-7 2.1.3 Натуральный логарифм
E f 4-7 2.1.3 Константа E (2.7182818284590451)
Тригонометрические
ACos(f) f 4-7 2.1.3 Арккосинус
ASin(f) f Арксинус
ATan(f) f Арктангенс
ATan2(f1, f2) f Арктангенс f1/f2
Cos(f) f Косинус
CosH(f) f Гиперболический косинус
Sin(f) f Синус
SinH(f) f Гиперболический синус
Tan(f) f Тангенс
TanH(f) f Гиперболический тангенс
Pi f Константа Pi (3.1415926535897931)
Строковые
Chr(si) c 4-7 1.1 Символ по коду
Ord(c) si 4-7 1.1 Код символа
StrReplace(s1, s2, s3) s 4-7 1.2.1 Заменяет в строке s1 подстроку s2 на s3
LongStrReplace(S1, S**2, S**3) S 1.2.0
StrStuff(s1, i1, i2, s2) s 4-7 1.0 В строке s1 удаляет i2 символов, начиная с i1, и вставляет на это место s2
LongStrStuff(S1, i1, i2, S2) S 1.2.0
LTrim(s) s 4-7 1.0 Удаляют пробелы слева
LongLTrim(S) S 1.2.1
RTrim(s) s 4-7 1.0 Удаляют пробелы справа
LongRTrim(S) S 1.2.1
StrLen(S) i 4-7 1.0 Длина строки
StrPos(s1, S2) i 4-7 1.0 Позиция строки s1 в строке s2. Если не найдено, то 0.
StrRepeat(s, i) s 4-7 1.0 Дублирует строку s i раз
LongStrRepeat(S, i) S 1.2.1
SubStr(s, i1, i2) s 4-7 1.0 Подстрока строки s, начиная с символа i1 и длиной максимум i2.
i1 < 0 - отсчет происходит с конца строки,
i2 < 0 - выводятся символы слева от точки отсчета.
LongSubStr(S, i1, i2) S 1.2.1
Trim(s) s 4-7 1.0 Удаляют все пробелы справа и слева
LongTrim(S) S 1.2.1
CIf(i, s1, s2) s 4-7 1.3.0 Если i=0, то s2, в остальных случаях - s1
LongCIf(i, S1, S2) S
StrCount(s1, S2) i 4-7 1.3.0 Количество вхождений s1 в S2
WordCount(S, s", si) i 4-7 1.3.0 Количество слов в строке S, разделенных символами из строки s". Если si<>0, то несколько разделителей подряд считаются словом.
WordNum(S, i, s", si) s 4-7 1.3.0 i-ое слово в строке S, разделенных символами из строки s". Если si<>0, то несколько разделителей подряд считаются словом.
LongWordNum(S, i, s", si) S
RLower(s) s 4-7 1.4.0 Строка в нижнем регистре (WIN1251)
LongRLower(S) S 1.5.0
RUpper(s) s 4-7 1.4.0 Строка в верхнем регистре (WIN1251)
LongRUpper(S) S 1.5.0
PadLeft(s, i, c) s 4-7 2.0.0 Дополняет строку s до длины i символом c слева.
LongPadLeft(S, i, c) S
PadRight(s, i, c) s 4-7 2.0.0 Дополняет строку s до длины i символом c справа.
LongPadRight(S, i, c) S
RLatin(s) s 4-7 2.0.0 Заменяет символы из win1251 на "похожие" из латиницы.
LongRLatin(S) S
RTranslit(s) s 4-7 2.0.0 Транслитерация из win1251 в латиницу.
LongRTranslit(S) S
StrCmp(S1, S2) si 4-7 2.1.1 Сравнение строк (si<0 - первая меньше, si=0 - равны, si>0 - первая больше)
C(s) s 4-7 2.1.1 Возращает пустую строку, если входящий параметр равен Null.
LongC(S) S
CEqual(S1, S2) i 4-7 2.1.1 Проверка равенства (1 означает равенство)
RepeatTrim(s1, s2) s 4-7 2.1.1 Удаляет дубли символа s2 в строке s1.
Пример:
RepeatTrim('1223', '2') = '123'
LongRepeatTrim(S1, S2) S
ConvertSymbols(s1, s2, s3) i 4-5 1.0 Меняет символы из набора s2 на набор s3 в строке s1.
Пример:
ConvertSymbols('1+2=3', '123', 'abc') = 'a+b=c'
LongConvertSymbols(S1, s2, s3) 4-7 2.1.1
Даты & Время
DayPerMonth(i1, i2) i 4-7 1.0 Число дней в i1 месяце i2 года
Dow(d) i 4-7 1.0 День недели (1-Понедельник, .., 7-Воскресенье)
ExtractDate(d) d 4-7 1.2.3 Из даты+времени выделяет чистую дату
ExtractTime(d) 2.0.0 Из даты+времени выделяет чистое время
Day(d) i 4-5 1.0 День
ExtractDay(d) 4-7 2.1.1
Month(d) i 4-5 1.0 Месяц
ExtractMonth(d) 4-7 2.1.1
Year(d) i 4-5 1.0 Год
ExtractYear(d) 4-7 2.1.1
Hour(d) i 4-5 1.5.2 Час
ExtractHour(d) 4-7 2.1.1
Minute(d) i 4-5 1.5.2 Минута
ExtractMinute(d) 4-7 2.1.1
Second(d) i 4-5 1.5.2 Секунда
ExtractSecond(d) 4-7 2.1.1
ExtractMillisecond(d) i 6-7 2.1.3 Миллисекунда
WeekDay(d) i 4-5 2.0.0 День недели . (0 - Воскресенье, 1 - Понедельник, ..., 6 - Суббота)
ExtractWeekDay(d) 4-7 2.1.1
YearDay(d) i 4-5 2.0.0 День года
ExtractYearDay(d) 4-7 2.1.1
Quarter(d) i 4-7 2.0.0 Квартал года
FirstDayMonth(d) d 4-7 2.0.0 Первый день месяца
LastDayMonth(d) d 4-7 2.0.0 Последний день месяца
IsLeapYear(i) i 4-7 2.0.0 1 - високосный год, 0 - невисокосный
DaysBetween(d1, d2) i 4-7 2.0.0 Количество дней между датами
DtIf(i, d1, d2) d 4-7 2.0.0 Если i=0, то d2, в остальных случаях - d1
IncDate(d, i1, i2, i3) d 4-7 2.0.1 Изменение даты на i1 дней, i2 месяцев, i3 лет.
IncDateTime(d, i1, i2, i3, i4, i5, i6) d 4-7 2.1.1 Изменяет дату на i1 дней, i2 месяцев, i3 лет, i4 часов, i5 минут, i6 секунд.
MaxDate(d1, d2) d 4-7 2.1.1 Большее из дат
MinDate(d1, d2) d 4-7 2.1.1 Меньшее из дат
DtEqual(d1, d2) i 4-7 2.1.1 Проверка равенства (1 означает равенство)
Преобразования типов
DateToStr(d, s)

Например: DateToStr('10.02.99','%d.%m. %y') = '10.02.99'
DateToStr('10.02.04 08:23','%d %B %Y, %X') =
'10 February 2004, 08:23:00'
s 4-7 1.0
Преобразование даты d в строку по формату s.
Строки форматирования
(соответствуют с-функции strftime):
%% - символ %,
%c - дата и время,
%x - дата,
%d - день месяца (01-31),
%j - день года (000-366),
%w - день недели (0-6), 0 - воскресенье,
%U - номер недели в году (00-53), воскресенье - первый день недели,
%W - номер недели в году (00-53), понедельник - первый день недели,
%a - краткое название дня недели,
%А - полное название дня недели,
%m - месяц (01-12),
%b - краткое название месяца,
%B - полное название месяца,
%y - год (00-99),    %Y - четырехзначный год,
%X - время,
%H - час (00-23),   %I - час (01-12),
%M - минута (00-59),
%p - AM или PM,
%S - секунда (00-59).
EncodeDate(i1, i2, i3) d 4-7 1.0 Дата по формату i1.i2.i3 = дд.мм.гггг
EncodeDateTime(i1, i2, i3, i4, i5, i6) d 4-7 1.5.2 Дата и время по формату
i1.i2.i3 i4:i5:i6 = дд.мм.гггг чч:мм:сс
DoubleToDate(f) d 4-7 2.1.2 Преобразование числа в дату.
DoubleToTime(f) d 4-7 2.1.2 Преобразование числа во время.
DateToDouble(d) f 4-7 2.1.1 Преобразование даты в число.
TimeToDouble(d) f 4-7 2.1.1 Преобразование времени в число.
FloatToStr(f, s)

Например:
FloatToStr(13.5, '%7.3e') = '1.350e+01'
FloatToStr(13.5, '%+7.3f') = ' +13.500'
FloatToStr(13.5345, '%.5g') = '13.534'
FloatToStr(13.5345, '%.5f') = '13.53450'
FloatToStr(13, '%05X') = '0000D'
FloatToStr(13, '%#04x') = '0x0d'

s 4-7 2.1.1
Преобразование числа f в строку по формату s.
Строки форматирования
(как в c-функции sprintf):
% [flags] [width] [.prec] type_char
flags:
- выравнивание влево
+ знак плюс или минус в начале
пробел пробел вместо плюса
# альтерн. преобразование:
0x (0X) впереди для типов x,X
всегда десятичная точка для e,E,f
width:
n как минимум n символов, дополненных пробелами
0n как минимум n символов, дополненных нулями
prec:
(нет) 1 для типов d,i,o,u,x,X
6 для типов e,E,f
все значимые цифры для g,G
.0 for d,i,o,u,x types, precision set to default
for e,E,f types, no decimal point
.n для типов d,i,o,u,x - как минимум n цифр
для типов e,E,f - n цифр после десятичной точки
для g,G - по большей части n значимых цифр
type_char:
d,i целое десятичное со знаком
o целое восьмеричное без знака
u целое десятичное без знака
x,X целое шестнадцатиричное без знака
f число со знаком в форме [-]dddd.dddd
e число со знаком в форме [-]d.dddd или e[+/-]ddd
g число со знаком в форме e или f, основанное на числе и точности
E,G то же, что и e,g, но с E в качестве знака экспоненты
IntToStr(i, s) s 4-7 2.1.1 Преобразование целого числа i в строку по формату s (см. FloatToStr)
NumInWords(i, c)
Например:
NumInWords(22, 'F') = 'Двадцать две'
s 4-7 2.1.3 Число словами (только WIN1251).
c - род существительного:
N - Средний, M - Мужской, F - Женский, P - Множественное.
BLOB
B_Line(B, i) s 4-7 2.0.0 i-я строка B
B_LongLine(B, i) S
B_Line_Count(B) i Количество строк
B_Max_Segment(B) i Максимальная длина сегмента
B_Number_Segments(B) i Количество сегментов
B_Put_Segment(S) B Запись сегмента в blob-поле (пример см. в rtest.sql)
B_SubStr(B, i1, i2) s Аналогичны SubStr
B_LongSubStr(B, i1, i2) S
B_Total_Length(B) i Количество байтов в B
B_StrCmp(B1, B2) si 4-7 2.1.2 Сравнение двух BLOBов. Аналогична StrCmp
B_StrPos(S, B) si 4-7 2.1.2 Поиск подстроки в BLOB. Аналогична StrPos
B_TextPos(S, B) si 4-7 2.1.2 Аналогична B_StrPos, но регистронезависимая
Битовые
BitAnd(i1, i2) i 4-7 2.0.0 i1 and i2
BitNot(i) i not(i)
BitOr(i1, i2) i i1 or i2
BitXor(i1, i2) i i1 xor i2
GetBit(i1, i2) i i2-й бит числа i1
SetBit(i1, i2, i3) i Заменяет i2-й бит числа i1 на i3. i3 может принимать значения 0 и 1.
API
Add_User(i, s1, s"2, s'3, s"4, s"5, s"6, s"7, s"8, s'9)

Например:
Add_User(1, 'ibserver', 'uname', 'password', '', 'john', 'jr', 'Doe', 'sysdba', 'masterke')
i 5-7 1.3.0 Добавление и изменение свойств пользователя. API InterBase. Добавляет (изменяет) пользователя с именем s''2 на сервере s1 из UNIX-группы s''4. Соединение производится по протоколу i (1-TCPIP, 2-NetBEUI, 3-SPX, 4-локально) пользователем s''8 с паролем s'9. Параметры: s'3 - пароль, s''5 - имя, s''6 - отчество, s''7 - фамилия. Возвращает код завершения (0-нормальное).
Modify_User(i, s1, s"2, s'3, s"4, s"5, s"6, s"7, s"8, s'9) i
Delete_User(i, s1, s"2, s"8, s'9) i 5-7 1.3.0 Удаление пользователя. API IB Database. удаляет пользователя с именем s''2 на сервере s1. Соединение производится по протоколу i (1-TCPIP, 2-NetBEUI, 3-SPX, 4-локально) пользователем s''8 с паролем s'9.
MsgBox(S1, s2, i) i 5-7
только
Windows
1.3.0 Окно сообщения с возможностью выбора. Не рекомендуется использовать на удаленных серверах. API Windows. Выводит окно с заголовком s2 и текстом S1.
Специальные
LibVersion s 4-7 2.1.1 Версия библиотеки rFunc
LibName s 4-7 2.1.1 Имя библиотеки (всегда "rfunc")
EAN13cs(s) si 4-7 2.1.1 Вычисляет контрольную цифру EAN13.
MD5Sum(S) c" 4-7 2.1.3 Контрольная сумма строки S по алгоритму MD5
MD5Init c* 4-7 2.1.3 Поблочное вычисление контрольной суммы MD5.
Как использовать:
- объявляем переменную context CHAR(176) для хранения промежуточного результата работы;
- объявляем переменную md5 CHAR(32) для конечного результата;
- вызываем context = md5Init();
- в цикле (ну или кому как надо) вызываем context = md5Update(context, S, SLen), где
context - понятно что,
S - очередная входная строка,
SLen - длина обрабатываемой строки;
- вызываем md5 = md5Final(context);
MD5Update(c*, S, i) c*
MD5Final(c*) c"
CreateGUID s"' 4-7 2.1.3 GUID в текстовом представлении
Файловые
Эти функции - дополнительные. Они не компилируются без установки специальной опции (смотри readme.txt). Используйте этот набор функций очень осторожно. Применение этих функций может повредить или удалить файлы на диске Вашего сервера.
FCreate(s, i) i 4-7 2.1.2 Создает файл с именем s. i - опции создания (сочетание FS_xxx). Возвращает дескриптор файла или отрицательное число если ошибка.
FOpen(s, i1, i2) i Открывает файл с именем s. Флаги доступа определяются i1. i2 - опции создания файла (i1=FO_CREAT). Возвращает дескриптор файла или отрицательное число если ошибка.
FRead(i1, i2) s Читает i2 байт из файла с дескриптором i1.
LongFRead(i1, i2)
FWrite(i, S) i Записывает байты из строки S в файл с дескриптором i. Возвращает количество записанных байтов.
FSeek(i1, i2, i3) i Устанавливает указатель файла i1 в новую позицию, которая находится в i2 байтах от позиции файла заданного i3.
FClose(i) i Закрывает файл с дескриптором i. Возвращает 0.
FRemove(s) i 2.1.3 Удаляет файл с именем s.
FSize(s) i 2.1.3 Размер файла
Функции-константы для параметра i1 функции FOpen:
FO_RDONLY
FO_WRONLY
FO_RDWR
FO_CREAT
FO_TRUNC
FO_EXCL
i 4-7 2.1.2 Открыть только для чтения .
Открыть только для записи.
Открыть для чтения и записи.
Если файл не создан, то он создается.
Если файл создан, он очищается.
Эксклюзивный доступ. Только с FO_CREAT.
FO_APPEND 2.1.3 Указатель файла будет установливаться в конец файла перед каждой записью в файл.

Функции-константы для параметра i3 функции FSeek:
FSEEK_SET
FSEEK_CUR
FSEEK_END

i 4-7 2.1.2 Начало файла .
Текущая позиция.
Конец файла.
Функции-константы для параметра i3 функции FOpen и i2 FCreate:
FS_IREAD
FS_IWRITE
FS_IEXEC
i 4-7 2.1.3 Владелец может читать
Владелец может изменять
Владелец может выполнять

* - Firebird 1.x и Yaffil 1.x считаются Interbase 6
** - Первое появление функции


история изменений

По всем вопросам, связанным с rFunc UDF Library, обращайтесь по адресу rFunc@mail.ru или на форум.


Copyright © 2003 Polaris Software