Сортировка файлов
От: fddima  
Дата: 02.08.06 07:12
Оценка: +2
Недавно случайно заметил, что Windows Explorer (по крайней мере в Windows Server 2003) сортирует файлы не в лексикографическом порядке, а в "человеческом". Алгоритма не знаю, но вот на картинке всё видно...
Правда красиво?

Re: Сортировка файлов
От: dshe  
Дата: 02.08.06 07:23
Оценка: 2 (1)
Здравствуйте, fddima, Вы писали:

F>Недавно случайно заметил, что Windows Explorer (по крайней мере в Windows Server 2003) сортирует файлы не в лексикографическом порядке, а в "человеческом". Алгоритма не знаю, но вот на картинке всё видно...

F>Правда красиво?

Можно попытатся найти алгоритм здесь smart_strcmp
Автор:
Дата: 08.03.03
--
Дмитро
Re: Сортировка файлов
От: Centaur Россия  
Дата: 02.08.06 08:51
Оценка:
Здравствуйте, fddima, Вы писали:

F>Недавно случайно заметил, что Windows Explorer (по крайней мере в Windows Server 2003) сортирует файлы не в лексикографическом порядке, а в "человеческом". Алгоритма не знаю, но вот на картинке всё видно...

F>Правда красиво?

Отвратительно. Попробуй подсунуть ей шестнадцатеричные, знаковые и/или дробные числа (скажем, номера версий).
Re: Сортировка файлов
От: iZEN СССР  
Дата: 02.08.06 08:53
Оценка:
Здравствуйте, fddima, Вы писали:

F>Недавно случайно заметил, что Windows Explorer (по крайней мере в Windows Server 2003) сортирует файлы не в лексикографическом порядке, а в "человеческом". Алгоритма не знаю, но вот на картинке всё видно...

F>Правда красиво?
Я уже нарвался на эту "красоту". Больше не хочу.
Re[2]: Сортировка файлов
От: fddima  
Дата: 02.08.06 08:58
Оценка:
Здравствуйте, Centaur, Вы писали:

C>Отвратительно. Попробуй подсунуть ей шестнадцатеричные, знаковые и/или дробные числа (скажем, номера версий).

Windows Explorer:
test-1.0.12
test-1.2.09
test-1.3.222
test-1.10.5


Обычная:
test-1.0.12
test-1.10.5
test-1.2.09
test-1.3.222

ы?

Шестнадцатеричные подсовывать не буду, не вижу необходимости называть так файлы.

В каких случая проблемы с версиями?
Re[2]: Сортировка файлов
От: fddima  
Дата: 02.08.06 08:59
Оценка: +2
Здравствуйте, iZEN, Вы писали:

ZEN>Я уже нарвался на эту "красоту". Больше не хочу.

Можно подробнее, что конкретно не так?
Нам ведь тоже интересно.
Re: Сортировка файлов
От: goto Россия  
Дата: 02.08.06 09:35
Оценка:
Возможно идиотский вопрос: а это не сортировка по дате для этих (тестовых) фолдеров, т.е. как бы просто unsorted? Как там называется такая "человеческая" сортировка?
Re[2]: Сортировка файлов
От: fddima  
Дата: 02.08.06 09:38
Оценка:
Здравствуйте, goto, Вы писали:

G>Возможно идиотский вопрос: а это не сортировка по дате для этих (тестовых) фолдеров, т.е. как бы просто unsorted? Как там называется такая "человеческая" сортировка?

Незнаю как называется. Да нет, сортировка по полю Name. Там же ж такой треугольничек стоит.
Да и сортировка по дате это не unsorted. В неотсортированном списке всё зависит от того как бог в каталог информацию о файле положит.
Re[2]: Сортировка файлов
От: raskin Россия  
Дата: 02.08.06 09:40
Оценка: +1
goto wrote:
> Возможно идиотский вопрос: а это не сортировка по дате для этих
> (тестовых) фолдеров, т.е. как бы просто unsorted? Как там называется
> такая "человеческая" сортировка?

Это сортировка следующим образом: имя файла разбивается на обычные
символы и числа, после чего каждое число притворяется единым символом
для лексикографической сортировки.
Posted via RSDN NNTP Server 2.0
Re[3]: Сортировка файлов
От: goto Россия  
Дата: 02.08.06 10:26
Оценка:
по дате — это не unsorted, конечно. Я имел в виду, что можно было создать тестовые директории именно в таком порядке, и они почти наверняка показались бы так без сортировки. Мой вопрос же был "идиоткий".

Такая сортировка — гут. Постоянно имею дело с большим кол-вом нумерованных файлов из разных софтов, иногда приходится ковыряться в них Explorer'ом, и если софт не вставил в номер "leading"-нули, то чисто строковая сортировка неудобна. Не зря же существует очень большое кол-во программок-ренэймеров.
Re[3]: Сортировка файлов
От: goto Россия  
Дата: 02.08.06 10:26
Оценка:
это понятно.
Re[3]: Сортировка файлов
От: Centaur Россия  
Дата: 02.08.06 10:42
Оценка:
Здравствуйте, fddima, Вы писали:

F>Здравствуйте, Centaur, Вы писали:


C>>Отвратительно. Попробуй подсунуть ей шестнадцатеричные, знаковые и/или дробные числа (скажем, номера версий).

F>Windows Explorer:
F>
test-1.0.12
F>test-1.2.09
F>test-1.3.222
F>test-1.10.5


F>Обычная:

F>
test-1.0.12
F>test-1.10.5
F>test-1.2.09
F>test-1.3.222

F>ы?

Когда я сортирую версии 3.0, 3.14159265358979323846 и 3.2, я ожидаю, что они пойдут именно в этом порядке.

F>Шестнадцатеричные подсовывать не буду, не вижу необходимости называть так файлы.


А я где-то видел, как приводили пример сортировки каталогов, названных по годам. 310BC, 1917AD. Это, с одной стороны, пример знаковых чисел в нетрадиционной записи, а с другой стороны — их можно было бы принять за шестнадцатеричные.

Вот, а с третьей стороны, должен ли алгоритм сортировки распознавать даты и ставить 09.05.1945 раньше 01.01.2001? А римские цифры? А "eleven", "двенадцать" и "juu-san"? А игнорировать the в начале названия? Если нет, то почему, а если да, то почему и как?

Решение сортировать беззнаковые целые числа в десятичной записи поднимает кучу вопросов про знаковые, дробные, недесятичные, и не-совсем-числа-но-тоже-упорядоченные-множества. Это лишняя сложность и отсутствие прозрачности.

Я предпочитаю называть файлы так, чтобы они естественно сортировались независимо от алгоритма. Это значит — test-012 (если остальные номера не больше 999), test-2006-08-02 (с датами), и test-1.03.222 (если остальные версии имеют два знака во второй части и предполагается, что 3 < 10).
Re: Сортировка файлов
От: Кодёнок  
Дата: 02.08.06 10:50
Оценка: 1 (1)
Здравствуйте, fddima, Вы писали:

F>Недавно случайно заметил, что Windows Explorer (по крайней мере в Windows Server 2003) сортирует файлы не в лексикографическом порядке, а в "человеческом". Алгоритма не знаю, но вот на картинке всё видно...

F>Правда красиво?

Это называется Natural Order Compare
Re[4]: Сортировка файлов
От: Кодёнок  
Дата: 02.08.06 10:56
Оценка: 1 (1) +3
Здравствуйте, Centaur, Вы писали:

C>Вот, а с третьей стороны, должен ли алгоритм сортировки распознавать даты и ставить 09.05.1945 раньше 01.01.2001? А римские цифры? А "eleven", "двенадцать" и "juu-san"? А игнорировать the в начале названия? Если нет, то почему, а если да, то почему и как?


C>Решение сортировать беззнаковые целые числа в десятичной записи поднимает кучу вопросов про знаковые, дробные, недесятичные, и не-совсем-числа-но-тоже-упорядоченные-множества. Это лишняя сложность и отсутствие прозрачности.


А должен ли он печь пироги и варить кофе? Пол мыть?

Что за чепуха про даты и т.п.? У нас есть два алгоритма: стандартный посимвольный и natural order. Сравниваем один с другим по твоим критериям:

— даты ни один из них не может правильно сортировать
— римские тоже
— eleven тоже
— the тоже

зато обычные цифры natural order сортирует куда лучше. Какие ещё претензии к алгоритму?
Re[4]: Сортировка файлов
От: fddima  
Дата: 02.08.06 11:06
Оценка:
Здравствуйте, Centaur, Вы писали:

C>Когда я сортирую версии 3.0, 3.14159265358979323846 и 3.2, я ожидаю, что они пойдут именно в этом порядке.

Ну а я всё таки ожидаю что 3.14 < 3.2. Ну так уж я приучился.
Хотя это ведь всё зависит от того как рассматривать компоненты версии... Всё таки совершенно не очевидно что 3.2.10, это тоже что и 3.200.1, поэтому и проще каждую компоненту воспринимать как число, тем более что сейчас везде так и используется.

C>Вот, а с третьей стороны, должен ли алгоритм сортировки распознавать даты и ставить 09.05.1945 раньше 01.01.2001? А римские цифры? А "eleven", "двенадцать" и "juu-san"? А игнорировать the в начале названия? Если нет, то почему, а если да, то почему и как?

C>Решение сортировать беззнаковые целые числа в десятичной записи поднимает кучу вопросов про знаковые, дробные, недесятичные, и не-совсем-числа-но-тоже-упорядоченные-множества. Это лишняя сложность и отсутствие прозрачности.
Какая-то жуткая специфика.

C>Я предпочитаю называть файлы так, чтобы они естественно сортировались независимо от алгоритма. Это значит — test-012 (если остальные номера не больше 999), test-2006-08-02 (с датами), и test-1.03.222 (если остальные версии имеют два знака во второй части и предполагается, что 3 < 10).

test-2006-08-02 в такой форме нормально и сортируются. В обычном нашем порядке — да.
Re[5]: Сортировка файлов
От: Centaur Россия  
Дата: 02.08.06 11:43
Оценка:
Здравствуйте, fddima, Вы писали:

F>Здравствуйте, Centaur, Вы писали:


C>>Когда я сортирую версии 3.0, 3.14159265358979323846 и 3.2, я ожидаю, что они пойдут именно в этом порядке.

F> Ну а я всё таки ожидаю что 3.14 < 3.2. Ну так уж я приучился.

Это одно и то же. Natural order поставит 3.14 после 3.2, я проверял.

C>>Вот, а с третьей стороны, должен ли алгоритм сортировки распознавать даты и ставить 09.05.1945 раньше 01.01.2001? А римские цифры? А "eleven", "двенадцать" и "juu-san"? А игнорировать the в начале названия? Если нет, то почему, а если да, то почему и как?

C>>Решение сортировать беззнаковые целые числа в десятичной записи поднимает кучу вопросов про знаковые, дробные, недесятичные, и не-совсем-числа-но-тоже-упорядоченные-множества. Это лишняя сложность и отсутствие прозрачности.
F> Какая-то жуткая специфика.

Не более жуткая, чем натуральные числа.
Re[6]: Сортировка файлов
От: fddima  
Дата: 02.08.06 11:53
Оценка:
Здравствуйте, Centaur, Вы писали:

C>Здравствуйте, fddima, Вы писали:


F>>Здравствуйте, Centaur, Вы писали:


C>>>Когда я сортирую версии 3.0, 3.14159265358979323846 и 3.2, я ожидаю, что они пойдут именно в этом порядке.

F>> Ну а я всё таки ожидаю что 3.14 < 3.2. Ну так уж я приучился.
C>Это одно и то же. Natural order поставит 3.14 после 3.2, я проверял.
Я тоже проверял. Я просто опечатался. Я имел ввиду больше, а не меньше.

F>> Какая-то жуткая специфика.

C>Не более жуткая, чем натуральные числа.
Но вполне адекватная так же как и даты. Я вот некоторые данные сохраняю в каталогах с нумерацией... причём даты тоже подошли бы, но честно говоря лень их писать, да еще писать в обратном порядке что бы нормально сортировались.

PS: И вообще-то я не собирался тут спорить как лучше, мне показалось это удобным, и захотел обратить на это внимание. А как правильно нумеровать версии и стоит ли это делать вообще — это вопрос совсем даже не сюда.
Re[5]: Сортировка файлов
От: Centaur Россия  
Дата: 02.08.06 11:56
Оценка:
Здравствуйте, Кодёнок, Вы писали:

Кё>Что за чепуха про даты и т.п.? У нас есть два алгоритма: стандартный посимвольный и natural order. Сравниваем один с другим по твоим критериям:


Кё>- даты ни один из них не может правильно сортировать

Кё>- римские тоже
Кё>- eleven тоже
Кё>- the тоже

Кё>зато обычные цифры natural order сортирует куда лучше.


Это субъективно. Вот отрывок из списка тестовых файлов моего текущего проекта:
f_1136va13.bmp
f_115dkf91.bmp
f_1173wt94.bmp
f_130ndr75.bmp

На каждой картинке — транспортное средство, а в имени файла — его государственный номер. Ничего общего с натуральными числами эти номера не имеют, кроме того, что местами используют цифры. И я, и мои коллеги, когда ищут в списке такой номер, ожидают его увидеть в том месте, где он должен быть согласно ASCII-сортировке.

Кё>Какие ещё претензии к алгоритму?


Претензии те, что он непомерно усложняется ради единственного частного случая сомнительной полезности. Принцип DWIM никого до добра не доводил.
Re[6]: Сортировка файлов
От: Кодёнок  
Дата: 02.08.06 11:58
Оценка: +4
Здравствуйте, Centaur, Вы писали:

C>Это одно и то же. Natural order поставит 3.14 после 3.2, я проверял.


И правильно сделает. Вот нумеровать версию 3.1.4 как 3.14 — это неправильно.
Re[7]: Сортировка файлов
От: Centaur Россия  
Дата: 02.08.06 12:16
Оценка:
Здравствуйте, fddima, Вы писали:

F> Но вполне адекватная так же как и даты. Я вот некоторые данные сохраняю в каталогах с нумерацией... причём даты тоже подошли бы, но честно говоря лень их писать, да еще писать в обратном порядке что бы нормально сортировались.


Я приучил себя писать даты в стандартном формате ISO ещё в средней школе, когда не знал ни того, что это стандартный формат ISO, ни что такое ISO вообще. Просто потому, что это логично — ставить старшие единицы вперёд младших, точно так же, как часы перед минутами или тысячи перед сотнями.

Что касается лени, то настоятельно рекомендую её побороть. Потому что у одного моего знакомого «некоторые данные» называются old, new, !new, !!new и !!new^2 (В частности, отсюда правило: ни в одном названии не должно присутствовать слово new. Потому что через две недели оно станет old, а переименовывать будет влом или нельзя.)
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.