Длинные строки
Четыре функции модуля 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,…