Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.07.2009, 15:29   #1
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию Сортировка файлов в Explorer vs сортировка в Delphi

Всем привет!

Столкнулся с такой проблемкой, необходимо добиться такой же сортировки как и в Проводнике, но там как-то интересно он сортирует, числа содержащиеся в именах он сортирует как числа (нули вначале не учитывает), если они к тому же разделены то он их еще и по этому признаку отдельно сортирует, подчеркивание у него меньше чем число. Если сортировать в Дельфи как строки, то совсем другой результат выходит.

Может кто уже реализовывал такое и есть алгоритм? (а то не хочется все грабли собирать и изобретать велосипед).
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 01.07.2009, 15:48   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Я считаю такую сортировку корявой, но когда-то предлагал разбивать строку на блоки-поля, в которых по порядку содержатся строки и числа, все это в БД, и БД сортировать, а потом полученное из полей опять в строки...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.07.2009, 16:18   #3
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

ну так тебе всего- то один компаратор написать, если алгоритм понятен )
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 01.07.2009, 17:06   #4
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

БД заводить специально не хочется для этого )

Да как сказать понятен или не понятен, нужно проанализировать еще, как он сортирует, корявая однозначно, мне как пользователю тоже не нравится такая, она противоречит ходу моих мыслей )

А вообще меня интересует в принципе в продуктах Микрософт сортировка файлов, нежели конкретно в проводнике. То есть какое имя они поставят выше а какое ниже. Я думаю что идеология та же что и в проводнике по идее и в других продуктах?
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 01.07.2009, 17:09   #5
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

По идее да (но не забываем, что идея и Microsoft понятия тяжело совместимые) А msdn на эту тему молчит ?
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 01.07.2009, 17:12   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
по идее и в других продуктах?
Скорее всего.

Тут еще такое мнение - проводник может пользоваться индексацией...
Можете меня помидорами закидать. но думаю что всетки там БД учавствует...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 04.09.2009, 05:39   #7
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Вобщем реализую сейчас эту сортировку. Задача оказалась весьма нетривиальной. Граблей немерено
Функция уже > 150 строк и с исправлением каждого бага разбухает еще на десяток другой. Очень интересно было бы посмотреть на родную реализацию этой фигни от Майкрософта.

Может все таки есть какая-то функция в ВинАпи к-рая может сравнить две строки как имена файлов? (или даже список отсортировать)

Пока делаю так: разбиваю строку на подстроки, подстроки-числа сравниваю как числа, остальные символы по их кодам, особенно непонятки с числами с содержанием нулей в начале и еще дефис, дефис это вообще чудеса, он вроде как и не учитывается, но в тоже время в нек-рых случаях еще как учитывается, и поди разберись как именно.

С числами например такая фигня:
//в таком порядке их сортирует Проводник
003_493.jpg
03_493.jpg
3_00493.jpg
3_493.jpg
Если из подстрок-чисел убрать нули в начале то получатся 4 одинаковые строки, значит надо запоминать где и сколько нулей убиралось, а это усложняет намного и так не маленький алгоритм.

Дефис - отдельная история, к примеру есть два файла
nightcity-1024.jpg
night-dr-1600.jpg
если заменить во втором файле букву после дефиса на меньшую чем 'c', то их порядок поменяется, т.е. тут дефис в сравнении не участвует, но это только тут, в других еще как участвует, особенно где дефисов больше чем букв )) Кстати именно эти два файла стандартный StringList.Sort тоже так расставляет.

В архиве функция. Советы, предложения принимаются.
Вложения
Тип файла: zip compare.zip (1.5 Кб, 17 просмотров)
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог

Последний раз редактировалось mutabor; 04.09.2009 в 05:57.
mutabor вне форума Ответить с цитированием
Старый 04.09.2009, 07:57   #8
Баламут
Баламучу слегка...
Участник клуба
 
Аватар для Баламут
 
Регистрация: 01.11.2006
Сообщений: 1,585
По умолчанию

Попытался смоделировать ситуацию. Для сравнения пользовался функцией WideCompareText. Честно говоря разницы между тем, что выдает проводник и своей программой пока не заметил. Еще немного погоняю...
Баламут вне форума Ответить с цитированием
Старый 04.09.2009, 08:17   #9
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

А может не резать строками, а сравнивать тогда regexp-ами ?
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 04.09.2009, 14:08   #10
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Цитата:
Для сравнения пользовался функцией WideCompareText
Попробовал, результат тот же что и у других дельфи функций, не подходит.

Цитата:
А может не резать строками, а сравнивать тогда regexp-ами ?
Не совсем понимаю чем они могут тут помочь. Можно подробнее идею пояснить?

На всякий случай поясню, проблема не в разделении строки на составляющие, это легко и уже сделано, проблема в чересчур хитром принципе сравнения. Особенно эти нули, они могут в корне поменять порядок, если окажется что в числовом виде (без нулей) имена равны.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог

Последний раз редактировалось mutabor; 04.09.2009 в 14:30.
mutabor вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка слиянием файлов [MI_nor] Общие вопросы C/C++ 1 01.06.2009 20:56
Сортировка файлов Minus Общие вопросы Delphi 2 28.04.2009 12:49
Сортировка файлов DonLena Паскаль, Turbo Pascal, PascalABC.NET 1 19.04.2009 20:05
Сортировка файлов russian-stalker Общие вопросы Delphi 4 25.09.2008 22:52