TStringList. Сортировка и системная locale

TStringList. Сортировка и системная locale Автор: Alexander Ilyin При разработке CGI-программы, отображающей иерархическую структуру в виде дерева, возникла следующая проблема: под административным логином все работало правильно, под другим - ветки дерева перемешивались. Оказалось, дело в текущем locale. Так работает сортированный TStringList, использованный для хранения структур отображаемых данных. Дело в том, что там для упорядочивания элементов списка по ключам использована функция AnsiCompareText (а не AnsiCompareStr, как указано в хелпе). ТИПОВЫЕ РЕШЕНИЯ. В ранних версиях Дельфи это поведение изменить можно, только переписав часть модуля Classes. В 5-й версии Борланд добавил к TStringList метод CustomSort (работающий, когда Sorted = False), который позволяет решить проблему путем подстановки своей функции сравнения строк. Сделать класс TStrList, в котором для упорядочивания использовать простую CompareStr. КОММЕНТАРИЙ Действительно, в справке Delphi по TStringList указано, что для сортировки используется AnsiCompareStr, и порядок сортировки зависит от текущей локали во время работы программы. Анализ текста Classes.pas показывает, что все операции сравнения строк в списках (при сортировке по-умолчанию, при поиске, а также при IndexOf) производятся при помощи AnsiCompareText. Последняя отличается от AnsiCompareStr тем, что выполняет сравнение без учета регистра символов, и, следовательно, результат иным образом зависит от текущей локали.

http://delphiworld.narod.ru/ DelphiWorld 6.0

Отправить комментарий

Проверка
Антиспам проверка
Image CAPTCHA
...