Форум: "Основная";
Текущий архив: 2006.04.16;
Скачать: [xml.tar.bz2];
ВнизСортировка в ListBox Найти похожие ветки
← →
Германн © (2006-03-14 17:55) [0]Может кто-нибудь объяснить такую сортировку:
001
0-01
002
Почему строка 0-01 ниже строки 001? Чем тире такое особенное?
← →
Desdechado © (2006-03-14 18:11) [1]строки сортируются по правилам для строк - больше код символа, дальше стоит
← →
Германн © (2006-03-14 18:18) [2]
> Desdechado © (14.03.06 18:11) [1]
>
> строки сортируются по правилам для строк - больше код символа,
> дальше стоит
По твоему $2d больше $30 ?
← →
Desdechado © (2006-03-14 18:30) [3]а сортировка-то включена?
и есть еще способы сортировки, учитывающие длину строк (некоторые СУБД так делают)
а также есть сортировки, которые игнорируют знаки подчеркивания (про минус не скажу)
а минус ли это вообще?
← →
Германн © (2006-03-14 18:36) [4]
> Desdechado © (14.03.06 18:30) [3]
>
> а сортировка-то включена?
> и есть еще способы сортировки, учитывающие длину строк (некоторые
> СУБД так делают)
> а также есть сортировки, которые игнорируют знаки подчеркивания
> (про минус не скажу)
> а минус ли это вообще?
>
Сортировка включена. Длина строк не учитывается (0011 тоже выше 0-01). Это действительно минус (именно $2d). Проверено в TListBox, TComboBox, TCheckListBox и TRxCheckListBox).
← →
begin...end © (2006-03-14 18:50) [5]Читать http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/resources/strings/stringreference/stringfunctions/comparestring.asp (Remarks).
← →
clickmaker © (2006-03-14 19:00) [6]
> Германн © (14.03.06 18:36) [4]
VCL юзает апишную функцию CompareString, а она трактует дефис как часть слова, т.е. слова goto и go-to у тебя будут идти друг за другом.
Для включения "чисто строковой" сортировки ей нужно подсунуть флажок SORT_STRINGSORT
← →
begin...end © (2006-03-14 19:16) [7]> clickmaker © (14.03.06 19:00) [6]
В VCL ListBox (CheckListBox) и ComboBox не занимаются сортировкой и не юзают CompareString. Вместо этого они устанавливают/сбрасывают стили контролов -- LBS_SORT и CBS_SORT.
← →
clickmaker © (2006-03-14 19:20) [8]
> begin...end © (14.03.06 19:16) [7]
сильно подозреваю, что виндозные контролы тоже юзают эту функцию. Иначе MS можно заподозрить в жульничестве :)
← →
Германн © (2006-03-15 01:52) [9]
> begin...end © (14.03.06 18:50) [5]
Спасибо! Прочитал. Отправил юзерам письмо с рекомендациями как им поступить, чтобы сделать то, что они хотят.
Только вот плохо, что в данной статье в примере различия между "сортировкой по словам" и "сортировкой по строками" не приведен вариант сравнения, например tant и t-ant. Поскольку смысл строки in order to ensure that words such as "coop" and "co-op" stay together within a sorted list. лично мне, не вполне ясен.
Дальнейшие мои копания в данной области привели к ещё одному феномену: строка 0_01 в списке стоит выше строки 001, хотя у неё второй симол имеет Ord = $5f ! А в вышеприведённой статье говорится только о необычной трактовке "тире" и "апострофа". :((( Это проверял только в ХР.
← →
Германн © (2006-03-15 02:17) [10]Я соб-сно почему в это дело влез. В одной конторе, где работал наш программно-аппаратный комплекс, сдох компьютер. Ребята из фирмы, которая обслуживает этот объект, заменили компьютер, установили на нём ОС и нашу программу. Скопировали на него базу данных из "резервной копии". Всё вроде бы заработало, но посыпались жалобы от пользователей, что "раньше у нас было по-другому". Ребята из той фирмы сами не справились, их директор попросил моего директора помощи. Приехал я туда. Исправил что мог, но вот в этом вопросе - сдался. Есть в программе два окна. Первое содержит полный список неких объектов, получаемый из базы данных SQL-запросом с "ORDER BY NameOfObject" и там сортировка привычная всем со времён ДОСа. Второе - TCheckListBox, в котором содержится динамически изменяющееся подмножество того самого полного списка. И сразу претензии: Почему в одном списе последовательность одна, а в другом другая? А вот раньше, до сбоя, оба списка были однотипные!
← →
clickmaker © (2006-03-15 09:48) [11]
> Германн © (15.03.06 02:17) [10]
ну так сортируй строки в чеклистбоксе сам, используя CompareString... в чем проблема-то?
← →
Desdechado © (2006-03-15 12:37) [12]Про подчеркивания я говорил. Эта фича AFAIR появиласть в XP SP2. Видимо, вместе с обработкой минуса.
Ради интереса, проверь как сортируются по именам файлы в каталоге на разных ОС, если в именах есть подчеркивание.
Кстати, Оракл сортирует тоже с игнорированием подчеркивания, например:
ВАЛЯ
В_АНЯ
ВАСЯ
← →
Anatoly Podgoretsky © (2006-03-15 13:08) [13]Германн © (15.03.06 02:17) [10]
Базы SQL это слишком расплывчато, например при использовании виндоуской сортировки в MS SQL будет именно так, как у тебя, а при использовании двоичной по кодам, есть еще куча сортировок.
← →
Германн © (2006-03-15 16:34) [14]
> Desdechado © (15.03.06 12:37) [12]
>
> Про подчеркивания я говорил. Эта фича AFAIR появиласть в
> XP SP2.
Не знаю, что ты имел в виду, но в Win98 тоже самое:
0_0_1
0_01
001
2 Anatoly Podgoretsky © (15.03.06 13:08) [13]
Да какие базы. Простой парадокс.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2006.04.16;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.066 c