[Comm] Неправильная сортировка в консоли?

Sergey Stepanov =?iso-8859-1?q?dlagovna_=CE=C1_mail=2Eru?=
Пт Окт 13 17:24:41 MSD 2006


> > Если LC_COLLATE не выставлено как C, то алгоритм сортировки
> > при обработке строк пропускает небуквенные символы.
> > Поэтому сортировка "неправильная". Зато по русскому алфавиту.
> >
> > Если LC_COLLATE=C то строки сортируются в чистом виде,
> > не сбрасывая со счетов небуквенные символы. Сортировка
> > в этом случае "правильная". Но зато не по русскому алфавиту.
> >
> > Вопрос. Как же сделать так, чтобы и сортировка шла по алфавиту,
> > и "небуквенные" символы учитывались при сортировке?
> 
> Интересный вопрос. А каков критерий правильности? На сколько я
> понимаю, при локали C, сортирующий механизм ничего не знает о буквах,
> и сотрирует согласно кодам символов в ASCII. Когда же вы
> устанавливаете локаль в отличное от C значение, то сортировка идёт в
> том порядке, в котором это указано в данной локали. И тут уже
> сортируются с буквы, а не коды символов. Вероятно, как сортировать
> небуквенные символы просто не задано. Да и не понятно, как их
> сортировать, каков должен быть порядок, должны они идти до букв или
> после, а может часть до, а часть после?  Каков критерий этой вашей
> "правильности"?

Критерий правильности простой, я же его написал - "чтобы и 
сортировка шла по алфавиту, и небуквенные символы учитывались 
при сортировке".

Мы имеем два варианта, и оба они неправильные.

1. LC_COLLATE!=C
_
а
А
аа
а_а
аб
а_б
аф
а_ф
аш
а_ш
б
Б
в
г
д


2. LC_COLLATE=C
_
ё
ю
а
а_а
а_б
а_ф
а_ш
аа
аб
аф
аш
б
ц
д
е
ф


А нужен третий вариант
_
а
а_а
а_б
а_ф
а_ш
аа
аб
аф
аш
А
б
Б
в
г
д

Вот. Как его добиться от программы sort, ls и.т.д.? 
Вообще никак?


PS:

По поводу небуквенных символов - при сортировке как минимум
должна учитываться эээ... одинаковость небуквенного символа.
То есть сивол "_" в одной строке одинаков с символом "_" в
другой строке, вне зависимости от того, имеет ли он ASCII код 
(или внутренний код в языке) или вообще его не имеет.
Должен интересовать только факт одинаковости. И согласно
этому факту, сортировка в любой локале должна быть 

bet_eng.png
bet_esp.png
bet_por.png
betperline_eng.png
betperline_esp.png
betperline_por.png

а не

bet_eng.png
bet_esp.png
betperline_eng.png
betperline_esp.png
betperline_por.png
bet_por.png


Со всяческими пожеланиями, Сергей.
http://xi.net.ru




Подробная информация о списке рассылки community