The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Сортировка по алфавиту в CGI скрипте на Perl."
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы WEB технологии (Public)
Изначальное сообщение [Проследить за развитием треда]

"Сортировка по алфавиту в CGI скрипте на Perl."
Сообщение от lev emailИскать по авторуВ закладки on 26-Мрт-01, 17:46  (MSK)
use POSIX qw(locale_h);
$old_locale = setlocale(LC_CTYPE,"ru_KOI8R");

@values = sort { $labels{$a} cmp $labels{$b} } keys %labels;

Но в кодировке KOI8R буквы "Ф" и "Х" стоят не по алфавиту.
Подскажите как решить проблему.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "RE: Сортировка по алфавиту в CGI скрипте на Perl."
Сообщение от Sergey Vlasov Искать по авторуВ закладки on 27-Мрт-01, 23:20  (MSK)
Быстрое решение: use locale;

Правильное решение: man perllocale :-)

  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "RE: Сортировка по алфавиту в CGI скрипте на Perl."
Сообщение от lev emailИскать по авторуВ закладки on 28-Мрт-01, 21:04  (MSK)
Правильное решение смотрел и раньше.
При повторном просмотре правильного решения обнаружил, что на сортировку влияет параметр LC_COLLATE или LC_ALL.
Но как и раньше буквы "Ф" и "Х" сортируются не в алфавитном порядке.
Числовые коды этих букв меньше чем должны быть при правильном алфавитном порядке. А сортировка функцией "cmp" сравнивает числовые коды букв.
Для чешского языка на CPAN лежит библиотека функций работы с национальным алфавитом.
Может кто нибудь встречал что-то подобное для русского языка?
  Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "RE: Сортировка по алфавиту в CGI скрипте на Perl."
Сообщение от Sergey Vlasov Искать по авторуВ закладки on 31-Мрт-01, 23:37  (MSK)
А какая система, какая libc, какой Perl? Дело в том, что после use locale для сравнения используется strxfrm() (так говорит man perllocale из Perl 5.6.0), соответственно, за сравнение отвечает libc. Если локаль настроена неправильно, вот тогда и будут глюки. За дополнительной информацией можно сходить на http://www.sensi.org/~alec/locale/index.html, после чего придется разбираться и правильно настраивать.
  Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "RE: Сортировка по алфавиту в CGI скрипте на Perl."
Сообщение от lev emailИскать по авторуВ закладки on 02-Апр-01, 16:50  (MSK)
Спасибо за линк.

На локальной машине все заработало.
Проблема была в том, что ru_SU не является "alias" к ru_RU, ru_KOI8R и ru. А переменная окружения LC_ALL по умолчанию установлена в ru_SU.
Теперь буду выяснять как у провайдера настроина переменная LC_ALL.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

5. "RE: Сортировка по алфавиту в CGI скрипте на Perl."
Сообщение от Sergey Vlasov Искать по авторуВ закладки on 02-Апр-01, 20:07  (MSK)
Правильно, страна SU теперь съежилась до размеров Судана. :-)

Кстати, скорее всего LC_ALL у провайдера не стоит. Никаких проблем - делается:

[code]
use posix qw(locale_h);
foreach (grep {/^LC_/} keys %ENV) { delete $ENV{$_} }
$ENV{'LANG'} = 'ru_RU.KOI8-R'; # или как надо в той системе
setlocale(LC_ALL, "");
[/code]

Рекомендация: ставить use locale только в том блоке, где это надо - иначе с -T будет проблемы.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

6. "RE: Сортировка по алфавиту в CGI скрипте на Perl."
Сообщение от lev emailИскать по авторуВ закладки on 04-Апр-01, 14:28  (MSK)
Еще раз большое спасибо за помощь.

Как только оживет провайдер, попробую твои рекомендации.

  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Спонсоры:
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2021 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру