Форум программистов, компьютерный форум, киберфорум
Perl
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/13: Рейтинг темы: голосов - 13, средняя оценка - 5.00
1 / 1 / 0
Регистрация: 30.03.2016
Сообщений: 4

Сортировка файла с русскими именами

01.07.2010, 11:19. Показов 2609. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как отсортировать?
потому как обычная сортировка допускает ошибки и сортирует не в точности с алфавитом. а,б,в,г,х,д,е,щ... и т.д.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.07.2010, 11:19
Ответы с готовыми решениями:

Картинки с русскими именами
Сервер Apache (Unix) Как при помощи PHP открыть картинку с русским наименованием Например ПЕ0001.jpg или ГП2001.jpg

проблема с русскими именами файлов
У меня возникла вот такая интересная проблема: Проблема с руским именем файла. Я написал web-приложение на Visual Basic 6.0. Использую...

Трабл с русскими именами файлов
Драсти. народ. В lotus script любые операции с файловой системой (open, copy, del...) не срабатывают с русскими именами файлов и...

4
ftMW
20.07.2010, 12:07
Поддержка русского включена?
Включается она, если тока есть русская кодовая страница в системе, и если сам интерпретатор ее поддерживает:
Perl
1
2
use POSIX qw(locale_h);
setlocale(LC_CTYPE, 'ru') or die 'locale!';
Вот так вот все и работает, после этого регекспы и сортировка могут работать с русскими символами.
 Аватар для palva
4278 / 2970 / 693
Регистрация: 08.06.2007
Сообщений: 9,930
Записей в блоге: 5
20.07.2010, 23:44
А у меня русский Windows 2000, perl 5.6.1. Запускаю программу
Code
1
2
3
4
5
6
7
8
use POSIX qw(locale_h);
setlocale(LC_CTYPE, 'ru') or die 'locale!';
@arr = ('С', 'с', 'Б', 'б', 'Ф', 'ф');
@arr = sort {$a cmp $b} @arr;
print @arr; # печатает БСФбсф
print '
';
print uc('фыва'); # печатает фыва
и не работает :-(
0
 Аватар для palva
4278 / 2970 / 693
Регистрация: 08.06.2007
Сообщений: 9,930
Записей в блоге: 5
21.07.2010, 23:10
Кажется разобрался. Во первых, обязательно должна быть строка

use locale;

Во вторых, локаль работает в предположении, что кодировка Windows-1251. А поскольку при тестировании я запускал скрипты и смотрел их вывод на консоль, то русские буквы, естественно набирал в cp866. Если набирать 1251 и выводить в файл (или отдавать с сервера браузеру), то всё прекрасно работает:
Code
1
2
3
4
5
6
7
8
9
10
11
use locale;
use POSIX qw(locale_h);
open OOO, '>out.txt';
setlocale(LC_ALL, 'ru') or die 'locale!';
@arr = ('С', 'с', 'Б', 'б', 'Ф', 'ф');
@arr = sort {$a cmp $b} @arr;
print OOO @arr; # печатает бБсСфФ
print OOO '
';
print OOO uc('фыва'); # печатает ФЫВА
close OOO;
Если же нужна кодировка CP-866, то нужно задавать другую локаль:
Code
1
2
3
4
5
6
7
8
9
10
11
use locale;
use POSIX qw(locale_h);
open OOO, '>out.txt';
setlocale(LC_ALL, 'Russian_Russia.866') or die 'locale!';
@arr = ('С', 'с', 'Б', 'б', 'Ф', 'ф');
@arr = sort @arr;
print OOO @arr; # печатает бБсСфФ
print OOO '
';
print OOO uc('фыва'); # печатает ФЫВА
close OOO;
В последнем случае если вместо LC_ALL задать LC_CTYPE, то сортировка будет работать неправильно. И это понятно, за сравнение отвечает LC_COLLATE, а LC_CTYPE влияет в данном случае только на функцию uc.
0
 Аватар для palva
4278 / 2970 / 693
Регистрация: 08.06.2007
Сообщений: 9,930
Записей в блоге: 5
21.07.2010, 23:26
Ну ваще атас! Если использовать LC_ALL, то начинает выводиться запятая вместо десятичной точки:

use locale;
use POSIX qw(locale_h);
setlocale(LC_ALL, 'Russian_Russia.866') or die 'locale!';
print 3.45; # Печатает 3,45

Так что надо указывать чисто конкретно, что требуется и не более:

setlocale(LC_COLLATE, 'Russian_Russia.866') or die 'locale!';
setlocale(LC_CTYPE, 'Russian_Russia.866') or die 'locale!';

а следующий вариант у меня почему-то работает неправильно

setlocale(LC_COLLATE+LC_TYPE, 'Russian_Russia.866') or die 'locale!';
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.07.2010, 23:26
Помогаю со студенческими работами здесь

Фильтрация DGV с русскими именами колонок
Ребят, ни как не могу понять в чем проблема. Вообщем сейчас датагридвью заполняется и фильтруется так: var prop = IPDynamic.PingIP; ...

Как Присоединять Файлы С Русскими Именами?
Поможите, люди добрые. Сам я программист начинающий и все такое. Нужно присоединять в поле RTF файл. Набросал код - все работает, но...

Лог копирования папок с русскими именами
надо скопировать несколько файлов и занести эти операции в протокол. При записи в протокол если папка названа по русски, то она...

Копирование файлов. Директории с русскими именами
Привет всем. Видимо я опять не знаю тонкостей cmd. У меня не получается скопировать файл из одной директории в другую - директории с...

Создание XML с русскими именами тэгов
Доброго времени суток! Создавал XML с библиотекой org.w3c.dom.*; Однако она отказывается добавлять в дерево документа тэги с русскими...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru