Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> AtiveState Perl и файлы с русскими именами, и рассширениями :( 
:(
    Опции темы
dead_ricky
Дата 4.5.2006, 07:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 4.4.2002

Репутация: нет
Всего: 1



Код

@ARGV = `where /r c:\\temp *.*`;
foreach (@ARGV)
{
    chomp();
    if(-f)  
    {
        print($_ . "\n");
        print((stat($_))[7] . "\n");
    }
}


Данный код не проглатывает файлы с русскими именами и расширениями smile. Ни -f, ни (stat($_))[7]. Как заставить глотать?  smile)  
PM MAIL   Вверх
sharq
Дата 4.5.2006, 10:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Perl Liker
**


Профиль
Группа: Участник
Сообщений: 841
Регистрация: 13.12.2004
Где: Ростов-на-Дону

Репутация: 23
Всего: 28



dead_ricky, я не знаю что за команда where, но догадываюсь, что она делает  smile 
ВОт тебе пример, русские имена файлов обрабатываются:

Код

use strict;

opendir my $dh, 'c:\\Documents and Settings\\sharq\\Рабочий стол\\';
foreach (readdir $dh) {
    printf "%15s %10d\n", $_, (stat($_))[7] if -f;
}


Результат:
Цитата

>perl твой_скрипт.pl
      DiskInfo.lnk           435
 RegCleaner.lnk          546
     CCleaner.lnk        1464
 твой_скрипт.pl          156
        Thumbs.db        4608


На платформах Windows у ActiveState проблем с локалью нет, по крайней мере, я первый раз об этом слышу.  smile 

Если все-таки какие-то проблемы возникают, а именно не обрабатываются русские имена, то попробуй это:
Код

use locale;
use POSIX qw (locale_h);
setlocale(LC_CTYPE, 'ru_RU.CP1251');
setlocale(LC_ALL, 'ru_RU.CP1251');


Иногда хватает только 
Код

use locale; 


 smile   

Это сообщение отредактировал(а) sharq - 4.5.2006, 10:09


--------------------
[color=gray]There's More Than One Way To Do It[/color]
PM MAIL WWW ICQ Skype   Вверх
dead_ricky
Дата 4.5.2006, 13:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 4.4.2002

Репутация: нет
Всего: 1



спасибо за ответ, но у меня че-то не заработало:

Код

use strict;
use locale;
use POSIX qw (locale_h);    

setlocale(LC_CTYPE, 'ru_RU.CP1251');    
setlocale(LC_ALL, 'ru_RU.CP1251');
@ARGV = `dir /S/B`; # заносим в ARGV список файлов
foreach (@ARGV)
{
    chomp();
    print($_ . "\t" . (-s) . "\n");
}


результат:

Цитата

C:\Temp\test>test.pl
C:\Temp\test\rez        414
C:\Temp\test\test.pl    322
C:\Temp\test\test.pl~   322
C:\Temp\test\test.vbs   338
C:\Temp\test\зло


сделал так:

Код

use strict;
use Encode;

@ARGV = `dir /S/B`; # заносим в ARGV список файлов
foreach (@ARGV)
{
    chomp();
    Encode::from_to($_, "cp866", "windows-1251");
    print($_ . "\t" . (-s) . "\n");
}


результат:

Цитата

C:\Temp\test>test.pl
C:\Temp\test\rez        414
C:\Temp\test\test.pl    205
C:\Temp\test\test.pl~   322
C:\Temp\test\test.vbs   338
C:\Temp\test\чыю        4605   # главное файл видит smile


 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1048 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.