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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Perl/TK chooseDirectory не могу прочитать каталог, значение получаю, а каталог не читает 
V
    Опции темы
burakov
Дата 6.3.2008, 11:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Добрый день, 
работаю под winxp
задача, нужно получить и прочитать каталог (из русских букв) при помощи chooseDirectory
вот код

Код

use Tk;

$main = MainWindow ->new;
$button_1 = $main->Button (-text => 'Work', -command => \&work) -> pack ();
$button_2 = $main->Button (-text => 'Exit', -command => [$main => 'destroy']) -> pack ();
MainLoop;


sub work {
$workdir = $main -> chooseDirectory (-initialdir, 'd:/');
print "$workdir\n";

chdir ($workdir);
opendir (DIR, $workdir) or die;
while ($file = readdir (DIR)){
print "$file\n";
}
closedir (DIR);
}



Специально smile не использовал никаких русских букв на кнопках, никаких перекодировок.
никаких encoding "ru_RU.CP1251";

сама программка набрана в cp1251 в блокноте.
ну вообщем результат -> smile
При выборе каталога D:/документы
print мне выдает d:/документы, т.е. все "ОК", но дальше все Died - не может открыть каталог.


chooseDirectory возвращает мне $workdir в cp1251 - (никакой смены кодировок не происходит) все нормально

если просто тупо прописать руками

Код

$workdir = 'd:/документы';
print "$workdir\n";

chdir ($workdir);
opendir (DIR, $workdir) or die;
while ($file = readdir (DIR)){
print "$file\n";
}
closedir (DIR);



все работает... 
а с   chooseDirectory НЕ РАБОТАЕТ...

Помогите, пожалуйста!


--------------------
Нотный архив http://libnote.ru скачать ноты бесплатно
PM MAIL   Вверх
shamber
Дата 6.3.2008, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1422
Регистрация: 5.9.2006
Где: Россия

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



burakov,А вы просто добавьте encoding "ru_RU.CP1251"; и используйте encode.
И проблем не будет

Это сообщение отредактировал(а) shamber - 6.3.2008, 13:11
PM MAIL Jabber   Вверх
burakov
Дата 6.3.2008, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



попробовал - не помогает.
А зачем использовать encoding "ru_RU.CP1251";
я ведь делаю 

Код

print "$workdir\n";


и в STDOUT выводит нормально (в нужной кодировке) 
d:\документы

я попробовал использовать encoding "ru_RU.CP1251";
тогда мне пришлось сделать
Код

$workdir = decode ('cp1251', $workdir)

иначе вместо каталога -> utf8.
после decode  принт отработал нормально показал, то что нужно 
и при попытке открыть (прочитать) каталог -> Died.

Попробуйте пожалуйста мой код (самый верхний) у себя.
Я ж его рабочий выложил smile только скопировать остается smile

Спасибо.



--------------------
Нотный архив http://libnote.ru скачать ноты бесплатно
PM MAIL   Вверх
shamber
Дата 6.3.2008, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1422
Регистрация: 5.9.2006
Где: Россия

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



burakov, 
пробуйте у себя

Код

!/usr/bin/perl -w
use strict;

use Encode qw(decode encode from_to);
use encoding "ru_RU.CP1251";

use Tk;

my $main = MainWindow ->new;
my $button_1 = $main->Button (-text => 'Work', -command => \&work) -> pack ();
my $button_2 = $main->Button (-text => 'Exit', -command => [$main => 'destroy']) -> pack ();
MainLoop;


sub work {
my $workdir = $main -> chooseDirectory (-initialdir, 'd:/');
$workdir= encode('cp1252', $workdir);
print "$workdir\n";

chdir ($workdir);
opendir (DIR, $workdir) or die;
while (my $file = readdir (DIR)){
print "$file\n";
}
closedir (DIR);
}


ЗЫ есть проблема с буквой Й

У меня была похожая проблема..... выход нашел в том что chooseDirectory возвращает не в cp1251 а  в cp1252.

Это сообщение отредактировал(а) shamber - 6.3.2008, 15:07
PM MAIL Jabber   Вверх
burakov
Дата 6.3.2008, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Спасибо.
потыкал (в своем варианте)
encode, decode cp1252 - все получилось....

фиг поймешь куда encode, откуда decode smile, но работает.

нет ли русского хелпа по Encode?
столько времени убивается на эти вот мелочи...

Спасибо большое...


--------------------
Нотный архив http://libnote.ru скачать ноты бесплатно
PM MAIL   Вверх
shamber
Дата 6.3.2008, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1422
Регистрация: 5.9.2006
Где: Россия

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



Пожалуйста. ставьте галку, что вопрос решен smile
PM MAIL Jabber   Вверх
burakov
Дата 7.3.2008, 09:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



ДА, Спасибо.
Ставлю галочку.


--------------------
Нотный архив http://libnote.ru скачать ноты бесплатно
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: GUI | Следующая тема »


 




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


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

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