Длинные строки
h2> StrUpper.
Заголовок:
Function StrLower(Str: PChar): PChar;
Преобразует строчные буквы строки Str к заглавным и возвращает указатель на результат. Функция правильно работает только с латиницей.
Четыре функции модуля Strings (StrLower, StrUpper, StrlComp и StrLIComp) используют преобразование высоты букв и работают корректно только для букв латинского алфавита (латиницы). Для русских букв эти функции можно изменить следующим образом:
{Этот модуль содержит модификацию функций стандартного модуля Strings для работы с кириллицей (альтернативный вариант кодировки}
{$Х+}
Unit StringsR;
INTERFACE
Function LoCase(Ch: Char): Char;
Function UpCase(Ch: Char): Char;
Function StrLower(Str: PChar): PChar;
Function StrUpper(Str: PChar): PChar;
Function StrlComp(Strl, Str2: PChar): Integer;
Function StrLIComp(Strl, Str2: PChar; MaxLen: Word): Integer;
IMPLEMENTATION
Uses Strings;
Function LoCase(Ch: Char): Char;
{Преобразует латинскую или русскую букву Ch к строчной}
begin
case Ch of
'A' . .'Z':LoCase:= Chr(ord('a')+ord(Ch)-ord('A'));
'A' . .'П':LoCase:= Chr(ord('a')+ord(Ch)-ord('A'));
'P' . .'Я':LoCase:= Chr(ord('p')+ord(Ch)-ord('P'));
else
LoCase:= Ch
end
end;
{-------------------}
Function UpCase(Ch: Char): Char;
{Преобразует латинскую или русскую букву Ch к заглавной}
begin
case Ch of
'a'..'z': UpCase := Chr(ord('A')+ord(Ch)-ord('a'));
'a'..'n': UpCase := Chr(ord('A')+ord(Ch)-ord('a'));
'p'..'я': UpCase := Chr(ord('P')+ord(Ch)-ord('p'));
else
UpCase:= Ch
end
end;
{-------------}
Function StrLower(Str: PChar): PChar;
{Преобразует латинские и русские буквы строки Str к строчным}
var
k: Word;
begin
for k := 0 to StrLen(Str)-1 do
Str[k]:= LoCase(Str[k]);
StrLower:= Str
end;
{-----------}
Function StrUpper(Str: PChar): PChar;
{Преобразует латинские и русские буквы строки Str к заглавным}
var
k: Word;
begin
for k :=0 to StrLen(Str)-1 do
Str[k]:= UpCase(Str[k]);
StrUpper:= Str
end;
{------------}
Function StrlComp (Str1, Str2 : PChar): Integer;
{Сравнивает две строки, игнорируя возможную разницу в высоте латинских или русских букв}
var
k: Word;
Max: Word;
begin
{Определяем максимальное количество сравниваемых символов как минимум длин строк}
Мах := StrLen(Str1) ;
if StrLen (Str2).<Max then
Max := StrLen(Str2) ;
{Проверяем символы до первого несовпадения.Буквы преобразуем к заглавным}
for k := 0 to Max-1 do
if UpCase(Strl[k])<>UpCase(Str2[k]) then
begin
{Строки не равны}
StrIComp := ord(UpCase(StrlCk]))-ord(UpCase(Str2[k]));
Exit
end;
{Разницы нет - результат зависит от совпадения длин}
StrIComp := StrLen(Str1)-StrLen(Str2)
end;
{--------------}
Function StrLIComp(Str1, Str2: PChar; MaxLen: Word): Integer;
{Сравнивает не более MaxLen символов строк, проверяя точное соответствие высоты букв}
var
k. Max: Word;
begin
{Определяем максимальное количество сравниваемых символов как минимум длин строк и MaxLen}
Мах := MaxLen;
if StrLen(Strl)<Max then Max := StrLen(Strl);
if StrLen(Str2)<Max then Max := StrLen(Str2);
{Проверяем символы до первого несовпадения.Буквы преобразуем к заглавным}
for k := 0 to Max do
if UpCase(Str1 [k])<>UpCase(Str2[k]) then
begin
StrLIComp := ord(UpCase(Str1[k]))-ord(UpCase(Str2[k]));
Exit
end;
{Разницы нет. Если проверено MaxLen символов, строки считаются равными, в противном случае результат зависит от совпадения длин строк}
if Max=MaxLen then
StrLIComp := 0
else
StrLIComp := StrLen(Str1)-StrLen(Str2)
end;
end.
Если Вы будете использовать этот модуль, ссылайтесь на него в предложении Uses после ссылки на стандартный модуль Strings:
Uses Strings, StringsR, ...