Автор Тема: как подправить LC_COLLATE?  (Прочитано 13014 раз)

Оффлайн PSV

  • Участник
  • *
  • Сообщений: 361
Re: как подправить LC_COLLATE?
« Ответ #15 : 01.02.2010 09:42:39 »
Ребята, ну у вас же богатый опыт. Некоторые из вас еще и людьми руководят.
1. Такой порядок сортировки нужен командой sort tst.txt. Это связанно с тем, что некоторые программы берут сортировки национальных алфавитов из LC_COLLATE. А по умолчанию там сортирует по принципу sort tst.txt. А вот можно ли изменить сортировку по умолчанию, я и пытаюсь выяснить.
2. По поводу sort -d tst.txt - вообще непонятно что творится.
[pavel_v@vmlpostgre2 ~]$ locale
LANG=ru_RU.CP1251
LC_CTYPE=ru_RU.CP1251
LC_NUMERIC="ru_RU.CP1251"
LC_TIME="ru_RU.CP1251"
LC_COLLATE="ru_RU.CP1251"
LC_MONETARY="ru_RU.CP1251"
LC_MESSAGES="ru_RU.CP1251"
LC_PAPER="ru_RU.CP1251"
LC_NAME="ru_RU.CP1251"
LC_ADDRESS="ru_RU.CP1251"
LC_TELEPHONE="ru_RU.CP1251"
LC_MEASUREMENT="ru_RU.CP1251"
LC_IDENTIFICATION="ru_RU.CP1251"
LC_ALL=
[pavel_v@vmlpostgre2 ~]$ vim tst.txt
 <-это пробел
10 класс
1 класс
20 класс
2 класс
30 класс
3 класс
а
ё
е
х
й
я
12 класс
15 класс
1
0
[pavel_v@vmlpostgre2 ~]$ sort tst.txt

0
1
10 класс
12 класс
15 класс
1 класс
20 класс
2 класс
30 класс
3 класс
а
е
ё
й
х
я
[pavel_v@vmlpostgre2 ~]$ sort -d tst.txt

0
1
10 класс
12 класс
15 класс
1 класс
20 класс
2 класс
30 класс
3 класс
а
е
ё
й
х
я
Это у меня что-то не так настроено? Или я не вижу разницы между sort tst.txt и sort -d tst.txt? Пробел ни там ни там не учтен. Поэтому и сортировки уезжают. Мне бы просто добавить бы учет пробелов в 1251 и я отстал бы со своим вопросом :)

Оффлайн Const

  • Глобальный модератор
  • *****
  • Сообщений: 2 653
  • Даже у плохого модератора есть свои плюсы…
Re: как подправить LC_COLLATE?
« Ответ #16 : 01.02.2010 09:49:30 »
$ sort -d sort.txt
а
е
ё
й
х
я
0
1
1 класс
10 класс
12 класс
15 класс
2 класс
20 класс
3 класс
30 класс
$ locale
LANG=ru_RU.UTF-8
LC_CTYPE="ru_RU.UTF-8"
LC_NUMERIC="ru_RU.UTF-8"
LC_TIME="ru_RU.UTF-8"
LC_COLLATE="ru_RU.UTF-8"
LC_MONETARY="ru_RU.UTF-8"
LC_MESSAGES="ru_RU.UTF-8"
LC_PAPER="ru_RU.UTF-8"
LC_NAME="ru_RU.UTF-8"
LC_ADDRESS="ru_RU.UTF-8"
LC_TELEPHONE="ru_RU.UTF-8"
LC_MEASUREMENT="ru_RU.UTF-8"
LC_IDENTIFICATION="ru_RU.UTF-8"
LC_ALL=

Оффлайн PSV

  • Участник
  • *
  • Сообщений: 361
Re: как подправить LC_COLLATE?
« Ответ #17 : 01.02.2010 11:15:22 »
Спасибо, в ru_RU.UTF8
sort tst.txt
сортируется как надо. Проблема ушла дальше, на взаимодействие с сервером :( Там почему-то по прежнему не работает сортировка.

Оффлайн Const

  • Глобальный модератор
  • *****
  • Сообщений: 2 653
  • Даже у плохого модератора есть свои плюсы…
Re: как подправить LC_COLLATE?
« Ответ #18 : 01.02.2010 12:13:51 »
Видимо, надо смотреть на тамошнюю локаль.

Оффлайн PSV

  • Участник
  • *
  • Сообщений: 361
Re: как подправить LC_COLLATE?
« Ответ #19 : 01.02.2010 12:37:34 »
Дак в том-то и дело,
LC_COLLATE и LC_CTYPE на postgre sql сервере показывают ru_RU.UTF8. Но сортируют без учета пробелов. На вопрос: откуда сортировочки, кивают на системные LC_*. В общем, темный лес какой-то.
Но самое плохое, что теперь нет внятного ответа, где искать проблему. Поскольку в начале грешил на локаль, но теперь она правильная. А вот люди, у которых стоит альт + постгрес, почему-то молчат.
Альты всем устраивают. Обосновал на него переход в конторе. А вот теперь мне по кумполу и прилетает. Это первая проблема, с которой не смог справиться. Все остальное логично и правильно.
Уж и не знаю, кого теперь спрашивать про локаль :)
Кстати, а почему sort -d в ru_RU.CP1251 локали неправльно сортирует? Не учитывает пробелы?
« Последнее редактирование: 01.02.2010 13:04:08 от PSV »

Оффлайн Const

  • Глобальный модератор
  • *****
  • Сообщений: 2 653
  • Даже у плохого модератора есть свои плюсы…
Re: как подправить LC_COLLATE?
« Ответ #20 : 01.02.2010 13:57:40 »
Нет у меня постгреса…

Кстати, а почему sort -d в ru_RU.CP1251 локали неправльно сортирует? Не учитывает пробелы?
Видимо, потому что уже переточили на utf-8 его

Оффлайн PSV

  • Участник
  • *
  • Сообщений: 361
Re: как подправить LC_COLLATE?
« Ответ #21 : 02.02.2010 05:51:42 »
Кстати, а почему sort -d в ru_RU.CP1251 локали неправльно сортирует? Не учитывает пробелы?
Видимо, потому что уже переточили на utf-8 его
Извиняюсь, но тогда встречный вопрос: а для чего пишут это в man? Сказано в мане, что учитывает пробелы, значит должно учитывать. А то получается, написано одно, а делает по другому :(
А что значит переточили? И можно ли не переточенный вариант? :)

Оффлайн Const

  • Глобальный модератор
  • *****
  • Сообщений: 2 653
  • Даже у плохого модератора есть свои плюсы…
Re: как подправить LC_COLLATE?
« Ответ #22 : 02.02.2010 06:46:40 »
Как в man сказано, так у меня и работает, кстати.

Нууу, возьмите исходники, — и поправьте под себя…

Оффлайн PSV

  • Участник
  • *
  • Сообщений: 361
Re: как подправить LC_COLLATE?
« Ответ #23 : 02.02.2010 12:53:09 »
взять исходники формирования LC_COLLATE?

Оффлайн Const

  • Глобальный модератор
  • *****
  • Сообщений: 2 653
  • Даже у плохого модератора есть свои плюсы…
Re: как подправить LC_COLLATE?
« Ответ #24 : 02.02.2010 12:54:52 »
Взять исходники sort

Оффлайн PSV

  • Участник
  • *
  • Сообщений: 361
Re: как подправить LC_COLLATE?
« Ответ #25 : 02.02.2010 14:04:46 »
А не подскажете, где про LC_*, sort вообще устройство этой кухни, можно почитать? Что бы представить общую картину. А то может это я чего-то недопонимаю просто?

Оффлайн Const

  • Глобальный модератор
  • *****
  • Сообщений: 2 653
  • Даже у плохого модератора есть свои плюсы…
Re: как подправить LC_COLLATE?
« Ответ #26 : 02.02.2010 14:37:54 »
Думаю, самое надёжное: исходники sort покурить.

Оффлайн ruslandh

  • Поспешай не торопясь !
  • Модератор глобальный
  • *****
  • Сообщений: 32 361
  • Учиться .... Телепатами не рождаются, ими ....
Re: как подправить LC_COLLATE?
« Ответ #27 : 02.02.2010 22:18:14 »
http://rus-linux.net/lib.php?name=/MyLDP/consol/HuMan/sort-ru.html
http://www.opennet.ru/man.shtml?topic=sort&category=1&russian=0
Пробел считается разделителем, возможно поэтому не учитывается.

Оффлайн PSV

  • Участник
  • *
  • Сообщений: 361
Re: как подправить LC_COLLATE?
« Ответ #28 : 03.02.2010 06:24:55 »
Спасибо за первую ссылку, очень познавательно.
Нда, если так, то получается полный облом. Так как, если пересобрать sort с другим разделителем по умолчанию, то наверняка что-нибудь поедет в системе, которая расчитывает на пробел по умолчанию.
Хотя тоже странно, поскольку на форуме постгрес сервера говорят, что с сортировкой и пробелом во FreeBSD все нормально.
« Последнее редактирование: 03.02.2010 06:48:39 от PSV »

Оффлайн PSV

  • Участник
  • *
  • Сообщений: 361
Re: как подправить LC_COLLATE?
« Ответ #29 : 03.02.2010 12:59:40 »
А не подскаже, где взять исходник локали ср1251?
В дебиане
/usr/share/i18n/locales
все исходники локалей.
Искал в альтах там же, но i18n папочка отсутствует :(