Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.04.16;
Скачать: CL | DM;

Вниз

Сортировка в 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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.032 c
9-1127849053
DR0N
2005-09-27 23:24
2006.04.16
OpenGl движок....


2-1144168672
Volkodav
2006-04-04 20:37
2006.04.16
Можно ли заставить прогу включить комп например в 10:30?


15-1143085953
Pavluha
2006-03-23 06:52
2006.04.16
Компоненты XComm и XModem


2-1143867577
Homakk
2006-04-01 08:59
2006.04.16
подсветка синтаксиса


4-1138289292
_zx
2006-01-26 18:28
2006.04.16
слот PCI