Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
15-1143440983
укенг
2006-03-27 10:29
2006.04.16
вопрос про КАСКО


2-1143743880
qqpp
2006-03-30 22:38
2006.04.16
Как лудше изменить внешний вид кнопок


2-1144064395
ANB
2006-04-03 15:39
2006.04.16
Как синхронизировать доступ к компонентам формы ?


2-1143693492
greg123
2006-03-30 08:38
2006.04.16
NMPOP3 и IDPOP3 - проблема с вложениями в письме


10-1115971030
Priest
2005-05-13 11:57
2006.04.16
Динамическое добавление методов к IDispatch





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский