VadimLou
![](http://forum.ru-board.com/board/avatars/private/VadimLou.gif)
Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Windows API CompareString Блин, неправильно работают ф-ции сравнения строк AnsiCompareXXX. Т.к. они являются обкруткой вокруг виндячей CompareString то проблема именно в последней. Вот пример кода с ошибкой для буквы "Ё". asrt; {$APPTYPE CONSOLE} uses Windows, SysUtils, Classes; const sRU: array[ 0 .. 3 ] of string = ( 'ЛБ', 'ЛЕ', 'ЛБС', 'ЛЕС' ); sRU2: array[ 0 .. 3 ] of string = ( 'ЛБ', 'ЛЕ', 'ЛБС', 'ЛЕС' ); var i, iCmp: Integer; S1, S2, sCmp: string; L1, L2: Integer; S1a, S2a: string; begin Writeln('------------------------'); S2 := 'ЛЁ'; L2 := Length(S2); SetLength(S2a, Length(S2)); AnsiToOEM( PChar(S2), PChar(S2a) ); for i := 0 to High(sRU) do begin S1 := sRU[i]; L1 := Length(S1); // AnsiCompareText: iCmp := Windows.CompareString(LOCALE_USER_DEFAULT, NORM_IGNORECASE, PChar(S1), L1, PChar(S2), L2) - 2; case iCmp of -1: sCmp := '< '; 0: sCmp := ' = '; 1: sCmp := ' >'; else sCmp := '?('+IntToStr(iCmp)+')'; end; SetLength(S1a, Length(S1)); AnsiToOEM( PChar(S1), PChar(S1a) ); Writeln(S1a:5, ' ', sCmp:9, ' ', S2a); end; S2 := 'ЛР'; L2 := Length(S2); SetLength(S2a, Length(S2)); AnsiToOEM( PChar(S2), PChar(S2a) ); Writeln('------------------------'); for i := 0 to High(sRU2) do begin S1 := sRU2[i]; L1 := Length(S1); // AnsiCompareText: iCmp := Windows.CompareString(LOCALE_USER_DEFAULT, NORM_IGNORECASE, PChar(S1), L1, PChar(S2), L2) - 2; case iCmp of -1: sCmp := '< '; 0: sCmp := ' = '; 1: sCmp := ' >'; else sCmp := '?('+IntToStr(iCmp)+')'; end; SetLength(S1a, Length(S1)); AnsiToOEM( PChar(S1), PChar(S1a) ); Writeln(S1a:5, ' ', sCmp:9, ' ', S2a); end; Writeln('------------------------'); end. Результат работы: ------------------------ ЛБ < ЛЁ ЛЕ < ЛЁ ЛБС < ЛЁ ЛЕС > ЛЁ ** тут должно быть наоборот ------------------------ ЛБ < ЛР ЛЕ < ЛР ЛБС < ЛР ЛЕС < ЛР ------------------------ Ни у кого нету замены для системной CompareString ? Кстати для уникодного CompareStringW теже яйца... не любят они славян ... | Всего записей: 702 | Зарегистр. 22-07-2004 | Отправлено: 00:05 14-03-2007 | Исправлено: VadimLou, 00:19 14-03-2007 |
|