Выше указанная хранимая процедура должна вернуть новую строку, которая
не содержит знаков препинания, а также все символы в верхнем регистре.
В предыдущем проекте использовался для артикулов только ISO8859_1,
новый проект требует использованиия UNICODE_FSS (желание заказчика)
в предыдущем проекте была написана UDF которая удаляла все ненужные
символы.Обявлялась она так
DECLARE EXTERNAL FUNCTION STRIP_REF
CSTRING(450)
RETURNS CSTRING(450) FREE_IT
ENTRY_POINT 'StripRef' MODULE_NAME 'libudf'
Текст такой (может кому надо)
library libudf;
{$R *.res}
uses Windows, SysUtils;
function StripString(st: string; CharsToStrip: string): string;
var
I: Integer;
begin
Result := '';
for I := 1 to Length(st) do
begin
if Pos(st[I], CharsToStrip) = 0 then
Result := Result + st[I];
end;
end;
threadvar
fcRef: PAnsiChar;
function StripRef(RefSrc: PChar): PChar; cdecl; export;
begin
if Pos('temp', StrPas(RefSrc)) > 0 then
fcRef := 'TEMP'
else
fcRef := PChar(AnsiUpperCase(StripString(StrPas(RefSrc),
' .,^«»®™/\:;-+*()|~`!@"#$&?''')));
Result := fcRef;
end;
exports
StripRef name 'StripRef';
begin
System.IsMultiThread := True;
end.
В новом проекте я решил использовать PWideChar вместо PChar,
но результат работы тестовой библиотеки показал, что возвращается
искаженный результат.