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

Оффлайн PSV

  • Участник
  • *
  • Сообщений: 361
как подправить LC_COLLATE?
« : 21.01.2010 11:45:23 »
Изначальный вопрос:
http://forum.altlinux.org/index.php/topic,5484.0.html
PostgreSQL:8.3.5 , AltLinux 4 server, все lc_ = ru_RU.WIN1251
Но там ветка все таки связана с дополнительным ПО. А вопрос уже перешел на Альты.
Если я правильно понимаю, LC_COLLATE используется для работы со строками, sort и прочие сортировки строк берутся именно оттуда.
Спецы, проконсультируйте, как мне сменить сортировки? Что бы при сортировке учитывались пробелы и спец символы. На данный момент они не учитываются.

Оффлайн Const

  • Глобальный модератор
  • *****
  • Сообщений: 2 653
  • Даже у плохого модератора есть свои плюсы…
Re: как подправить LC_COLLATE?
« Ответ #1 : 21.01.2010 11:56:57 »
Я правильно понял вопрос? вам надо переопределить переменную окружения?
export LC_COLLATE=что_надо_написать
не?

Оффлайн black_13

  • Участник
  • *
  • Сообщений: 657
  • Gentoo + Debian + ALT
    • diff.org.ua
Re: как подправить LC_COLLATE?
« Ответ #2 : 21.01.2010 12:27:24 »
Из man bash
............................
 INPUTRC
              The filename for the readline startup file, overriding the default of ~/.inputrc (see READLINE below).
       LANG   Used to determine the locale category for any category not specifically selected with a variable starting with LC_.
       LC_ALL This variable overrides the value of LANG and any other LC_ variable specifying a locale category.
       LC_COLLATE
              This variable determines the collation order used when sorting the results of pathname expansion, and determines the behavior of range expressions,
              equivalence classes, and collating sequences within pathname expansion and pattern matching.
       LC_CTYPE
              This variable determines the interpretation of characters and the behavior of character classes within pathname expansion and pattern matching.
       LC_MESSAGES
              This variable determines the locale used to translate double-quoted strings preceded by a $
.............................
Такчто так и есть  ;)
export LC_COLLATE="_чего_хотите_" должно работать наура!

Оффлайн PSV

  • Участник
  • *
  • Сообщений: 361
Re: как подправить LC_COLLATE?
« Ответ #3 : 21.01.2010 13:14:34 »
Я сильно извиняюсь, но я вас не понял. новичокс :)
export LC_COLLATE="_чего_хотите_" должно работать наура!
А как мне тогда узнать, что мне нужно? Я же только знаю, что сортировка должна учитывать пробелы и спецсимволы. По идее POSIX должен так сортировать. Если быть точным, то
sort -g
-это искомая сортировка. Как её сделать дефолтной для ru_RU.win1251?
« Последнее редактирование: 21.01.2010 13:24:44 от PSV »

Оффлайн black_13

  • Участник
  • *
  • Сообщений: 657
  • Gentoo + Debian + ALT
    • diff.org.ua
Re: как подправить LC_COLLATE?
« Ответ #4 : 21.01.2010 14:13:30 »
Цитировать
По идее POSIX должен так сортировать.
Ну так и присвойте этой переменной значение POSIX
black@black:~$ export |grep -i lc_
declare -x LC_ALL="en_US.UTF-8"
declare -x LC_MESSAGES="en_US.UTF-8"
black@black:~$ export LC_COLLATE="POSIX"
black@black:~$ export |grep -i lc_
declare -x LC_ALL="en_US.UTF-8"
declare -x LC_COLLATE="POSIX"
declare -x LC_MESSAGES="en_US.UTF-8"
black@black:~$

Оффлайн Const

  • Глобальный модератор
  • *****
  • Сообщений: 2 653
  • Даже у плохого модератора есть свои плюсы…
Re: как подправить LC_COLLATE?
« Ответ #5 : 21.01.2010 14:33:09 »
ru_RU.win1251?
Нет такой локали! есть ru_RU.CP1251

Оффлайн PSV

  • Участник
  • *
  • Сообщений: 361
Re: как подправить LC_COLLATE?
« Ответ #6 : 22.01.2010 12:06:13 »
а не подскажете, как сервису подсунуть LC_COLLATE?

Оффлайн Skull

  • Глобальный модератор
  • *****
  • Сообщений: 20 168
    • Домашняя страница
Re: как подправить LC_COLLATE?
« Ответ #7 : 22.01.2010 17:59:51 »
а не подскажете, как сервису подсунуть LC_COLLATE?
В начале файла /etc/init.d/postgresqlпропишите.
Андрей Черепанов (cas@)

Оффлайн PSV

  • Участник
  • *
  • Сообщений: 361
Re: как подправить LC_COLLATE?
« Ответ #8 : 25.01.2010 10:36:42 »
К сожалению, подсунуть LC_COLLATE можно, но это не работает как надо. Единственная LC_COLLATE которая учитывает пробелы при сортировке, это LC_COLLATE=C, но тогда всякие функции приведения в нижний/верхний регистр для кирилицы не работают :(, что тоже неправильно. И при сортировке ё/Ё улетают вперед а/А. Это не критично, но не приятно.
А можно ли как-то переписать LC_COLLATE что бы у LC_COLLATE=ru_RU.CP1251 сортировка была как у LC_COLLATE=C? То-есть  учетом пробелов?

Оффлайн PSV

  • Участник
  • *
  • Сообщений: 361
Re: как подправить LC_COLLATE?
« Ответ #9 : 30.01.2010 11:37:45 »
Или посоветуйте, к кому с этим вопросом можно обратиться.

Оффлайн PSV

  • Участник
  • *
  • Сообщений: 361
Re: как подправить LC_COLLATE?
« Ответ #10 : 01.02.2010 06:19:21 »
Неужели все считают правильной следующий порядок вещей:
[pavel_v@vmlpostgre2 ~]$ sort tst.txt
10 класс
12 класс
15 класс
1 класс
20 класс
2 класс
30 класс
3 класс

Оффлайн Andrey

  • Участник
  • *
  • Сообщений: 734
Re: как подправить LC_COLLATE?
« Ответ #11 : 01.02.2010 06:26:28 »
sort -g tst.txt

Оффлайн PSV

  • Участник
  • *
  • Сообщений: 361
Re: как подправить LC_COLLATE?
« Ответ #12 : 01.02.2010 07:23:08 »
[pavel_v@vmlpostgre2 ~]$ sort -g tst.txt
1 класс
2 класс
3 класс
10 класс
12 класс
15 класс
20 класс
30 класс
Порядок тоже сбит. Правильнее было бы так(в LC_COLLATE=C делает правильно, но надо для ru_RU.CP1251):
[pavel_v@vmlpostgre2 ~]$ sort -g tst.txt
1 класс
10 класс
12 класс
15 класс
2 класс
20 класс
3 класс
30 класс
Надо такую сортировку без ключа -g получать. Включить по умолчанию так сказать.

Оффлайн Const

  • Глобальный модератор
  • *****
  • Сообщений: 2 653
  • Даже у плохого модератора есть свои плюсы…
Re: как подправить LC_COLLATE?
« Ответ #13 : 01.02.2010 08:45:26 »
$ sort -d sort.txt
1 класс
10 класс
12 класс
15 класс
2 класс
20 класс
3 класс
30 класс
Вот в man русским языком написано:
       -d, --dictionary-order
              воспринимать  в составе ключей лишь буквы (латинского алфавита),
              цифры и пробелы, игнорируя все прочие символы
а всё одно — не читают ;(


Оффлайн ruslandh

  • Поспешай не торопясь !
  • Модератор глобальный
  • *****
  • Сообщений: 32 361
  • Учиться .... Телепатами не рождаются, ими ....
Re: как подправить LC_COLLATE?
« Ответ #14 : 01.02.2010 08:50:28 »
Цитата: man sort
      *** ВНИМАНИЕ ***

       На сортировку влияют установки локали.  Установите переменную окружения
       LC_ALL=C  ,  чтобы  получить  обычную сортировку в том порядке, который
       использует действительные значения байт.