- •1.Назначение
 - •2.История
 - •3.Ядро программы
 - •4.Установка
 - •5.Экспортируемые функции dll и рекомендации по их использованию
 - •5.1.Общие положения
 - •5.2.Функции, выполняющие склонение фио, должностей и подразделений
 - •5.3.Сервисные функции
 - •5.4.Функции, работающие со словарем исключений
 - •5.5.Представление чисел (сумм) прописью, склонениe числительных и валют.
 - •5.5.3.Справочник валют
 - •6.Примеры обращения к функциям Библиотеки
 - •7.Сервер автоматизации
 - •7.1.Краткое описание
 - •7.2.Примеры обращения
 - •7.2.1.Delphi (проект SampleCom)
 - •8.Восстановление именительного падежа
 - •9.Словарь исключений
 - •10.Область применения
 - •11.Правила склонения фио, реализованные в Библиотеке
 - •12.Комплект поставки
 - •12.1.Версии до 3.Х
 - •12.2.Версия 4.X
 - •12.3.Условия поставки
 - •13.Литература
 - •14.Благодарности
 - •15.Заключение
 
6.Примеры обращения к функциям Библиотеки
«Объяснение принципов помогает думать. Примеры учат обезьянничать», поэтому, несмотря на название раздела, приводятся все-таки, по возможности, принципы. Кроме того, примеры вызовов функций можно посмотреть и в соответствующих файлах примеров.
Уместное и важное замечание, т.к. общение с функциями Библиотеки идет через указатели на нуль-терминальные строки, то распределением памяти (и уничтожением) должно заниматься вызывающее приложение, т.е. на вас как программисте лежит ответственность за своевременное выделение и освобождение памяти при вызове функций Библиотеки. Функции Библиотеки не распределяют и не освобождают память необходимую для возврата результатов своих преобразований. Возвращаемый основными функциями параметр, помимо всего прочего, сообщает об этом: хватило или нет предоставленного буфера для размещения результата склонения переданной строки. Например, «Иванов Иван Иванович» является строкой из 20 символов, то для преобразования в творительный падеж «Ивановым Иваном Ивановичем» понадобится уже 26 символов. При выделении памяти под результат (pResult) необходимо это учитывать.
6.1.Delphi
Перед обращением к функциям DLL необходимо выбрать тип линковки – статическая или динамическая.
Статическая линковка.
Объявляется библиотечная функция:
function GetFIOPadegFSAS(pFIO: PChar; nPadeg: LongInt; pResult: PChar; var
nLen: LongInt):Integer; stdcall; external
'PadegUC.dll' Name 'GetFIOPadegFSAS';
После этого можно к ней обратиться. Примерно так:
function MakePadeg(cFIO: String; nPadeg: Integer): String;
var
tmpS : PChar;
nLen : LongInt;
RetVal : Integer;
begin
Result := '';
nLen := Length(cFIO) + 10; // размер буфера под результат преобразования
tmpS := StrAlloc(nLen); // распределение памяти под результат
try
RetVal := GetFIOPadegFSAS(PChar(cFIO), nPadeg, tmpS, nLen);
// проверим возвращенное значения.
if RetVal=-1 then
ShowMessage('Недопустимое значение падежа - ' + IntToStr(nPadeg))
else
Result := Copy(tmpS, 1, nLen);
finally
StrDispose(tmpS); // освобождение выделенной памяти
end;
end;
Динамическая линковка.
Сначала объявляем переменные:
var
DllHandle : HMODULE;
GetPadeg : function(pFIO: PChar; nPadeg: LongInt; pResult: PChar;
var nLen: LongInt): Integer; stdcall;
затем, допустим, при создании формы:
procedure TForm1.FormCreate(Sender: TObject);
begin
DllHandle := LoadLibrary('PadegUC.dll'); // допускается ипользование файла PadegUCA.dll
if DllHandle <> 0 then
@GetPadeg := GetProcAddress(DllHandle, 'GetFIOPadegFSAS')
else begin
MessageBox(0, 'Не найдена динамическая Библиотека PadegUC.dll'+#10+#13+
'Функции склонения недоступны.',
'Предупреждение',
MB_OK + MB_ICONEXCLAMATION + MB_TASKMODAL);
btnDecl.Enabled := False; // обращение к DLL из обработчика этой кнопки
end;
end;
и обработчик события:
procedure TForm1.btnDeclClick(Sender: TObject);
var
pResult : PChar;
nLen, i : Integer;
begin
if Assigned(GetPadeg) then begin
nLen := Length(edFIO.Text) + 10;
pResult := StrAlloc(nLen);
try
i := GetPadeg(PChar(edFIO.Text), rgCase.ItemIndex+1, pResult, nLen);
if i = 0 then Edit2.Text := StrPas(pResult)
else Edit2.Text := IntToStr(i); // при ошибке покажем код
finally
StrDispose(pResult);
end;
end;
end;
здесь: edFIO - TEdit, содержащий ФИО для склонения; rgCase - TRadioGroupe в которой задается нужный падеж;
ну и, наконец:
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
FreeLibrary(DllHandle);
end;
Приведеные решения можно оформлены в виде интерфейсного модуля padegFIO.pas, отвечающего за работу с DLL. Именно такой подход использован при разработке примера (каталог Sample\Delphi), входящего в комплект поставки. Вы можете использовать данные модули в собственных проектах (Delphi XE и выше).
Начиная в версии 4.0 в примерах для Delphi есть вызов функций Библиотеки с использованием сервера автоматизации SampleCom.dpr (Sample\DelphiCom).
Для знакомства c примерами вызова просим смотреть исходники, т.к. использование сервера автоматизации проще чем динамическая линковка, к тому же иногда картинка заменит тысячу слов.
6.2.C/C++
Для обзора возможностей библиотечных функций создадим консольный проект на Microsoft Visual C++.
Рассмотрим динамическую загрузку функций Библиотеки.
// подключим необходимые модули
#include "stdafx.h"
#include <windows.h>
#include <iostream.h>
HINSTANCE hDLL; // хендл Библиотеки DLL
// объявления используемых функций
typedef int (__stdcall *LPFNGetFIOPadegAS)(unsigned char *,unsigned char *, unsigned char *, int, unsigned char *, int &);
LPFNGetFIOPadegAS lpfnGetFIOPadegAS; // указатель на функцию
typedef int (__stdcall *LPFNGetFullAppointmentPadeg)(unsigned char *, unsigned char *, int, unsigned char *, int &);
LPFNGetFullAppointmentPadeg lpfnGetFullAppointmentPadeg;
// и само тело
void main()
{
…
// загружаем Библиотеку с указанием пути к ней (или без пути, если использовались приведенные выше рекомендации)
hDLL=LoadLibrary("PadegUC.dll");
if(hDLL==NULL) // ошибка загрузки Библиотеки
{
cout << "Unable to load library!" << endl;
return;
}
// получим указатель на нашу функцию
lpfnGetFIOPadegAS=(LPFNGetFIOPadegAS)GetProcAddress(hDLL, "GetFIOPadegAS");
if( lpfnGetFIOPadegAS==NULL )
{
cout << "Unable to load function(s)." << endl;
FreeLibrary(hDLL);
return;
}
// и для примера возьмем известного русского
char *cpLastName, *cpFirstName, *cpMiddleName;
char cResult[200]; // буфер для результата
cpLastName="Иванов";
cpFirstName="Иван";
cpMiddleName="Иванович";
iLen=200;
// указываем фамилию, имя, отчество, падеж и куда поместить результат
iParam=lpfnGetFIOPadegAS((unsigned char *) cpLastName, (unsigned char *) cpFirstName,(unsigned char *)cpMiddleName, 5, (unsigned char *)cResult, iLen);
cout << cResult << endl; // на выходе видим “Ивановым Иваном Ивановичем”
// аналогично просклоняем должность и отдел
lpfnGetFullAppointmentPadeg=(LPFNGetFullAppointmentPadeg)GetProcAddress(hDLL, "GetFullAppointmentPadeg");
if( lpfnGetFullAppointmentPadeg==NULL )
{
cout << "Unable to load function GetFullAppointmentPadeg" << endl;
FreeLibrary(hDLL);
return;
}
// только теперь, для разнообразия, укажем размер входящих буферов
char cAppointment[100], cOffice[100];
iLen=200;
strcpy(cAppointment,"инженер-программист");
strcpy(cOffice, "отдел информационных технологий");
iParam=lpfnGetFullAppointmentPadeg((unsigned char *)cAppointment, (unsigned char *)cOffice, 5, (unsigned char *)cResult, &iLen);
// на выходе "инженером-программистом отдела информационных технологий"
cout << cResult << endl;
FreeLibrary(hDLL); // освобождаем память
…
}
Еще в комплекте представлен пример работы с Библиотекой на C++ Builder, См. каталог \Sample\CPP Builder.
6.3.VB/VBA
Предлагаемая версия программы совместима с продуктами Microsoft Office 97/2000/XP и выше.
Ниже приводятся примеры объявления библиотечных функций GetFIOPadegFSAS и GetNominativePadeg, а также глобальной функции MakePadeg (см. файл Example.xls) в Microsoft Office 2010 для 4 версии Библиотеки.
' Функция склонения ФИО с автоматическим определением пола по отчеству
Private Declare PtrSafe Function GetPadeg Lib "PadegUC.dll" Alias "GetFIOPadegFSAS" _
(ByVal pFIO As String, ByVal nPadeg As Long, ByVal pResult As String, ByRef nLen As Long) As Integer
' Функция восстановления именительного падежа
Private Declare PtrSafe Function GetNominativePadeg Lib "PadegUC.dll" _
(ByVal pFIO As String, ByVal pResult As String, ByRef nLen As Long) As Integer
' Функция преобразования cFIO в падеж nPadeg
Public Function MakePadeg(ByVal cFIO As String, ByVal nPadeg As Long) As String
Dim tmpS As String
Dim nLen As Long
Dim RetVal As Integer
nLen = 255
tmpS = String(nLen, 0)
RetVal = GetPadeg(StrConv(cFIO, vbUnicode), nPadeg, tmpS, nLen) ' с переводом ASC - Unicode
tmpS = StrConv(tmpS, vbFromUnicode) ' перевод в Unicode - ASC
If RetVal = -1 Then MsgBox "Недопустимое значение падежа - " & "(" & nPadeg & ")", , "Склонение ФИО"
MakePadeg = Mid(tmpS, 1, nLen)
End Function
' Функция восстановления именительного падежа
Public Function Nominative(ByVal cFIO As String) As String
Dim tmpS As String
Dim nLen As Long
Dim RetVal As Integer
nLen = 255
tmpS = String(nLen, 0)
RetVal = GetNominativePadeg(StrConv(cFIO, vbUnicode), tmpS, nLen) ' с переводом ASC - Unicode
tmpS = StrConv(tmpS, vbFromUnicode) ' перевод в Unicode - ASC
Nominative = Mid(tmpS, 1, nLen)
End Function
Как видно из кода, реализация функции MakePadeg предусматривает вывод предупреждения с указанием неправильного значения падежа при некорректном его задании. Обращение к остальным функциям DLL производится аналогично.
Для выполнения операций склонения в приложениях Microsoft Word и Microsoft Excel в поставку версии 3.X включены макросы, основой которых является функция MakePadeg. Указанные макросы находятся в файлах MacroWrd.bas и MacroExl.bas для MS Word и MS Excel, соответственно. Кроме того, в поставку входит шаблон Справка.dot с несколько модифицированной функцией MakePadeg. Поместите его в каталог "\Program Files\Microsoft Office\Шаблоны" или другой, содержащий шаблоны для MS Office. Создайте документ на основе этого шаблона ("Пуск->Создать документ Microsoft Office"). Ввод ФИО получателя справки и вставка в текст ФИО в нужном падеже производится с помощью панели инструментов "Ввод ФИО для справки".
Приведенные макросы и функции могут использоваться как сами по себе, так и при разработке собственных программ.
Так как версия 4 полностью поддерживает строки Unicode, то при передаче и возврате значений функций Библиотеки следует перед обращением преобразовать строки VBA в Unicode, что и показано в приведенном примере (функция StrConv()):
RetVal = GetPadeg(StrConv(cFIO, vbUnicode), nPadeg, tmpS, nLen) ' с переводом ASC - Unicode
tmpS = StrConv(tmpS, vbFromUnicode) ' перевод в Unicode - ASC
6.4.Firebird
Собрать отдельную библиотеку для Firebird вынудили разные соглашения о вызовах (cdecl для Firebird и stdcall в PadegUC.dll), а также желание избавиться от паразитных параметров (pResult и nLen) в PadegUC.dll, использующихся в VB/VBA.
В данной сборке в основном возможно использование библиотеки в базах созданных в различных базовых кодировках (WIN1251 и UTF8), функции будут корректно принимать и возвращать значения в кодировке базы данных ориентируясь на тип кодировки строкового входного параметра. В некоторых функциях нет возможно опреджелдить тип кодировки выходного значения, в этом случае функция возвращает строки в UTF8, это следует помнить в случае применения Библиотеки для БД созданной в базовой кодировке WIN1251 и явно объявлять кодировку выходного парвметра (CHARACTER SET UTF8). Ниже в таблице для таких функций есть пометка «возврат CHARACTER SET UTF8».
Реализованы следующие функции (для более подробного описания см. лписания функций в разделе 5):
| 
			 | 
		DECLCURRENCY  | 
		Cклонение числового значения (1) валюты (2) в указанный падеж (3) и вывод в указанной форме (4). Возврат CHARACTER SET UTF8.  | 
	
| 
			 | 
		DECLNUMERAL  | 
		Функция склонения строкового числительного. Возврат CHARACTER SET UTF8. Параметры: 1 - строковое числительнoе в именительном падеже, результат использования одной из предыдущих функций NumberToString, SumInWords или DoubleToVerbal; 2 - пребуемый падеж (1..6); пол (-1 – средний, 0 – женский. 1 – мужской) 3 - если установлено (true) порядковое иначе количественное (отсутсвие или присутсивеи дробной части соответсвенно); 4 - если установлено (true) одушевленное иначе неодушевленное. 
 Примеры вызова: select DeclNumeral(DOUBLETOVERBAL(1.6), 5, 1, 0, 0) from rdb$database 
 select DeclNumeral(SUMINWORDS(1.618, 1, 2, 1, 1), 5, 1, 0, 0) from rdb$database  | 
	
| 
			 | 
		DOUBLETOVERBAL  | 
		Простое представление числа прописью. Возврат CHARACTER SET UTF8.  | 
	
| 
			 | 
		GETAPPOINTMENTPADEG  | 
		Склонение должности. Параметры должность, падеж.  | 
	
| 
			 | 
		GETDICTIONARY  | 
		Получение полного имени словаря исключений (возврат CHARACTER SET UTF8). Без входных параметров.  | 
	
| 
			 | 
		GETFIOPADEG  | 
		Функция склонения фамилии, имени, отчества, из именительного падежа в любой другой падеж. Входные параметры: отдельно фимилия, имя, отчество в именительном падеже, пол(1 - мужчина, 0 - женщина), падеж.  | 
	
| 
			 | 
		GETFIOPADEGFSAS  | 
		Склонение ФИО с автоматическим определением рода (пола). Параметры ФИО, падеж  | 
	
| 
			 | 
		GETFIPADEGFS  | 
		Склонение фамилии и имени записанных одной строкой. Параметры ФИО, род (1 - мужчина, 0 - женщина), падеж.  | 
	
| 
			 | 
		GETFULLAPPOINTMENTPADEG  | 
		Склонение наименования должности (1-й параметр) и подразделения (2-й параметр) в падеже заданным третьим параметром.  | 
	
| 
			 | 
		GETNOMINATIVEPADEG  | 
		Функция восстановления именительного падежа. Входной параметр ФИО в склонении, выход: ФИО в именительном падеже.  | 
	
| 
			 | 
		GETOFFICEPADEG  | 
		Склонение подразделения. Параметры подразделение, падеж.  | 
	
| 
			 | 
		GET_SEX  | 
		Определение пола по ФИО (отчеству). Параметры ФИО. Возвращает 1 - "М", 0 - "Ж".  | 
	
| 
			 | 
		NUMBERTOSTRING  | 
		Функция преобразования числа в строковый эквивалент (возврат CHARACTER SET UTF8). Параметры: 1 - число для преобразования переданного как строка для увеличения к-ва значащих цифр; 2 - род (-1 (средн.), 0 (жен.), 1(муж.)); 3 - к-во цифр в дробной части: 0-нет; 4 - удалять "лишние" нули в дробной части; 5 - преобразовывать дробную часть.  | 
	
| 
			 | 
		SETDICTIONARY  | 
		Установка и загрузка нового словаря исключений. Входной параметр полное имя словаря исключений. Возвращает успех - 1, неудача - 0.  | 
	
| 
			 | 
		SUMINWORDS  | 
		Функция преобразования числа в строковый эквивалент (возврат CHARACTER SET UTF8), аналог NumberToString. Параметры: число для преобразования (тип double); род (-1 (средн.), 0 (жен.), 1(муж.)); к-во цифр в дробной части: 0-нет; удалять "лишние" нули в дробной части; преобразовывать дробную часть.  | 
	
| 
			 | 
		UPDATEEXCEPTIONS  | 
		Выполняет перезагрузку словаря исключений. Возвращает значения: 1 - успешное, 0 - ошибка.  | 
	
Скрипт объявления функций библиотеки:
/*************************************************************************/
/*** Generated by IBExpert 2015.1.13.1 12.05.2015 ***/
/*************************************************************************/
SET SQL DIALECT 3;
SET NAMES UTF8;
/*************************************************************************/
/*** User defined functions (UDF) ***/
/*************************************************************************/
DECLARE EXTERNAL FUNCTION DECLCURRENCY
NUMERIC(18,4),
CSTRING(10),
INTEGER,
INTEGER
RETURNS CSTRING(500) CHARACTER SET UTF8
ENTRY_POINT 'DeclCurrency' MODULE_NAME 'PadegFB';
DECLARE EXTERNAL FUNCTION DECLNUMERAL
CSTRING(50),
INTEGER,
INTEGER,
INTEGER,
INTEGER
RETURNS CSTRING(500) CHARACTER SET UTF8
ENTRY_POINT 'DeclNumeral' MODULE_NAME 'PadegFB';
DECLARE EXTERNAL FUNCTION DOUBLETOVERBAL
DOUBLE PRECISION
RETURNS CSTRING(500) CHARACTER SET UTF8
ENTRY_POINT 'DoubleToVerbal' MODULE_NAME 'PadegFB';
DECLARE EXTERNAL FUNCTION GETAPPOINTMENTPADEG
CSTRING(500),
INTEGER
RETURNS CSTRING(500)
ENTRY_POINT 'GetAppointmentPadeg' MODULE_NAME 'PadegFB';
DECLARE EXTERNAL FUNCTION GETDICTIONARY
RETURNS CSTRING(500) CHARACTER SET UTF8
ENTRY_POINT 'GetDictionary' MODULE_NAME 'PadegFB';
DECLARE EXTERNAL FUNCTION GETFIOPADEG
CSTRING(200),
CSTRING(200),
CSTRING(200),
INTEGER,
INTEGER
RETURNS CSTRING(500)
ENTRY_POINT 'GetFIOPadeg' MODULE_NAME 'PadegFB';
DECLARE EXTERNAL FUNCTION GETFIOPADEGFS
CSTRING(200),
INTEGER,
INTEGER
RETURNS CSTRING(200)
ENTRY_POINT 'GetFIOPadegFS' MODULE_NAME 'PadegFB';
DECLARE EXTERNAL FUNCTION GETFIOPADEGFSAS
CSTRING(200),
INTEGER
RETURNS CSTRING(200)
ENTRY_POINT 'GetFIOPadegFSAS' MODULE_NAME 'PadegFB';
DECLARE EXTERNAL FUNCTION GETFIPADEGFS
CSTRING(500),
INTEGER,
INTEGER
RETURNS CSTRING(500)
ENTRY_POINT 'GetFIPadegFSU8' MODULE_NAME 'PadegFB';
DECLARE EXTERNAL FUNCTION GETFULLAPPOINTMENTPADEG
CSTRING(500),
CSTRING(500),
INTEGER
RETURNS CSTRING(1000)
ENTRY_POINT 'GetFullAppointmentPadeg' MODULE_NAME 'PadegFB';
DECLARE EXTERNAL FUNCTION GETNOMINATIVEPADEG
CSTRING(500)
RETURNS CSTRING(500)
ENTRY_POINT 'GetNominativePadeg' MODULE_NAME 'PadegFB';
DECLARE EXTERNAL FUNCTION GETOFFICEPADEG
CSTRING(500),
INTEGER
RETURNS CSTRING(500)
ENTRY_POINT 'GetOfficePadeg' MODULE_NAME 'PadegFB';
DECLARE EXTERNAL FUNCTION GET_SEX
CSTRING(200)
RETURNS INTEGER BY VALUE
ENTRY_POINT 'Get_Sex' MODULE_NAME 'PadegFB';
DECLARE EXTERNAL FUNCTION NUMBERTOSTRING
CSTRING(50),
INTEGER,
INTEGER,
INTEGER,
INTEGER
RETURNS CSTRING(500) CHARACTER SET UTF8
ENTRY_POINT 'NumberToString' MODULE_NAME 'PadegFB';
DECLARE EXTERNAL FUNCTION SETDICTIONARY
CSTRING(200)
RETURNS INTEGER BY VALUE
ENTRY_POINT 'SetDictionary' MODULE_NAME 'PadegFB';
DECLARE EXTERNAL FUNCTION SUMINWORDS
DOUBLE PRECISION,
INTEGER,
INTEGER,
INTEGER,
INTEGER
RETURNS CSTRING(500) CHARACTER SET UTF8
ENTRY_POINT 'SumInWords' MODULE_NAME 'PadegFB';
DECLARE EXTERNAL FUNCTION UPDATEEXCEPTIONS
RETURNS INTEGER BY VALUE
ENTRY_POINT 'UpdateExceptions' MODULE_NAME 'PadegFB';
/*************************************************************************/
/*** Descriptions ***/
/*************************************************************************/
DESCRIBE FUNCTION DECLCURRENCY
'Cклонение числового значения (1) валюты (2) в указанный падеж (3) и вывод в указанной форме (4).';
DESCRIBE FUNCTION DECLNUMERAL
'Функция склонения строкового числительного.
Параметры:
1 - строковое числительнoе в именительном падеже, результат использования одной из предыдущих функций NumberToString, SumInWords или DoubleToVerbal;
2 - пребуемый падеж (1..6);
пол (-1 – средний, 0 – женский. 1 – мужской)
3 - если установлено (true) порядковое иначе количественное (отсутсвие или присутсивеи дробной части соответсвенно);
4 - если установлено (true) одушевленное иначе неодушевленное.
Примеры вызова:
select DeclNumeral(DOUBLETOVERBAL(1.6), 5, 1, 0, 0)
from rdb$database
select DeclNumeral(SUMINWORDS(1.618, 1, 2, 1, 1), 5, 1, 0, 0)
from rdb$database';
DESCRIBE FUNCTION DOUBLETOVERBAL
'Представление числа прописью.';
DESCRIBE FUNCTION GETAPPOINTMENTPADEG
'Склонение должности. Параметры должность, падеж.';
DESCRIBE FUNCTION GETDICTIONARY
'Получение полного имени словаря исключений (возврат CHARACTER SET UTF8). Без входных параметров.';
DESCRIBE FUNCTION GETFIOPADEG
'Функция склонения фамилии, имени, отчества, из именительного падежа в любой другой падеж.
Входные параметры: отдельно фимилия, имя, отчество в именительном падеже, пол(1 - мужчина, 0 - женщина), падеж.';
DESCRIBE FUNCTION GETFIOPADEGFS
'Функция склонения фамилии, имени, отчества, записанных одной строкой, из именительного падежа в любой другой падеж.
Входные параметры: ФИО в именительном падеже, пол(1 - мужчина, 0 - женщина), падеж.';
DESCRIBE FUNCTION GETFIOPADEGFSAS
'Склонение ФИО с автоматическим определением рода (пола). Параметры ФИО, падеж';
DESCRIBE FUNCTION GETFIPADEGFS
'Склонение фамилии и имени(см. GETIFPADEGFS, там имени и фамилии), записанных одной строкой.
Параметры ФИО, род (1 - мужчина, 0 - женщина), падеж.';
DESCRIBE FUNCTION GETFULLAPPOINTMENTPADEG
'Склонение наименования должности (1-й параметр) и подразделения (2-й параметр) в падеже заданным третьим параметром.';
DESCRIBE FUNCTION GETNOMINATIVEPADEG
'Функция восстановления именительного падежа. Входной параметр ФИО в склонении, выход: ФИО в именительном падеже';
DESCRIBE FUNCTION GETOFFICEPADEG
'Склонение подразделения. Параметры подразделение, падеж';
DESCRIBE FUNCTION GET_SEX
'Определение пола по ФИО (отчеству). Параметры ФИО. Возвращает 1 - "М", 0 - "Ж"';
DESCRIBE FUNCTION NUMBERTOSTRING
'Функция преобразования числа в строковый эквивалент (возврат CHARACTER SET UTF8).
Параметры:
число для преобразования переданного как строка для увеличения к-ва значащих цифр;
род (-1 (средн.), 0 (жен.), 1(муж.));
к-во цифр в дробной части: 0-нет;
удалять "лишние" нули в дробной части;
преобразовывать дробную часть.';
DESCRIBE FUNCTION SETDICTIONARY
'Установка и загрузка нового словаря исключений. Входной параметр полное имя словаря исключений. Возвращает успех - 1, неудача - 0.';
DESCRIBE FUNCTION SUMINWORDS
'Функция преобразования числа в строковый эквивалент (возврат CHARACTER SET UTF8), аналог NumberToString.
Параметры:
число для преобразования (тип double);
род (-1 (средн.), 0 (жен.), 1(муж.));
к-во цифр в дробной части: 0-нет;
удалять "лишние" нули в дробной части;
преобразовывать дробную часть.';
DESCRIBE FUNCTION UPDATEEXCEPTIONS
'Выполняет перезагрузку словаря исключений. Возвращает значения: 1 - успешное, 0 - ошибка.';
В итоге вы можете использовать такие запросы:
select e.fio, getfiopadegfsas(e.fio, 2) as fio_padeg2, getfiopadegfsas(e.fio, 5) as fio_padeg5
from employee e
Вот с такими результатами
FIO  | 
		FIO_PADEG2  | 
		FIO_PADEG5  | 
	
Давыдов Денис Олегович  | 
		Давыдова Дениса Олеговича  | 
		Давыдовым Денисом Олеговичем  | 
	
Пакшан Геннадий Евгеньевич  | 
		Пакшана Геннадия Евгеньевича  | 
		Пакшаном Геннадием Евгеньевичем  | 
	
Труфанов Виталий Николаевич  | 
		Труфанова Виталия Николаевича  | 
		Труфановым Виталием Николаевичем  | 
	
Соколов Николай Константинович  | 
		Соколова Николая Константиновича  | 
		Соколовым Николаем Константиновичем  | 
	
Старшова Ольга Владимировна  | 
		Старшовой Ольги Владимировны  | 
		Старшовой Ольгой Владимировной  | 
	
СЕМЕНОВ МИХАИЛ НИКОЛАЕВИЧ  | 
		Семенова Михаила Николаевича  | 
		Семеновым Михаилом Николаевичем  | 
	
Шарафутдинова Фарида Ильгизаровна  | 
		Шарафутдиновой Фариды Ильгизаровны  | 
		Шарафутдиновой Фаридой Ильгизаровной  | 
	
Васильев Александр Викторович  | 
		Васильева Александра Викторовича  | 
		Васильевым Александром Викторовичем  | 
	
Борисов Андрей Валерьевич  | 
		Борисова Андрея Валерьевича  | 
		Борисовым Андреем Валерьевичем  | 
	
Володина Марина Евгеньевна  | 
		Володиной Марины Евгеньевны  | 
		Володиной Мариной Евгеньевной  | 
	
,,,  | 
		,,,  | 
		,,,  | 
	
База PADEG.FDB (кодировка ANSI) содержит болrее 2 000 фамилий, их можно использовать для экспериментов.
База PADEG_UTF.FDB (кодировка UTF8) предназначена для тестов.
