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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Замена пробела в названии директории, как заменить пробел на '%20' 
:(
    Опции темы
garataur
Дата 26.9.2007, 16:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Добрый день!
Подскажите пожалуйста как проверять переменную $dir (в которой сохраняется имя директории) на наличие пробелов и, в случае присутствия оных заменять их на '%20'.
Или ссылку по теме..
Спасибо заранее
PM MAIL   Вверх
nitr
Дата 26.9.2007, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

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



garataur, регулярные выражения...

к примеру можно так ;)
Код

$dir =~ s/ /%20/g;



--------------------
PM   Вверх
garataur
Дата 26.9.2007, 18:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо, попробую.
Может распарсите мне вот такое:
BEGIN {
    my($dir) = $0 =~ /(.*\/)/;
....
что это значит?
ну и сорри за тупые вопросы..
PM MAIL   Вверх
korob2001
Дата 26.9.2007, 19:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

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



Да впринципе ничего это не означает.  smile 
Здесь кто-то пытается выдернуть текущий каталог и сохранить его в переменную $dir, но проблема в том, что переменная $0 хранит имя текущего скрипта, куда не входит путь к каталогу. Вобщем удаляй эту канитель и напиши следующее в начале скрипта:
Код

use Cwd;
my $dir = cwd;

Теперь мы определили текущий каталог, причём не зависимо от платформы.


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
amg
Дата 27.9.2007, 05:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(korob2001 @  26.9.2007,  19:00 Найти цитируемый пост)
...переменная $0 хранит имя текущего скрипта, куда не входит путь к каталогу
Если скрипт вызывали с полным/частичным путем, то входит.

PM MAIL   Вверх
korob2001
Дата 27.9.2007, 06:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

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



Ну тогда нужно смотреть часть программы, где используется переменная $dir. Хотя всё же советую пользоваться cwd, тогда переменная будет содержать путь к текущему каталогу без "если" и не зависимо от того, какой разделитель использует система.


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
garataur
Дата 27.9.2007, 09:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



вот эта функция при сканировании, если в названии директории есть пробел выдаёт Cannot open $dir: (выделено)
Ну и вопрос в том, собственно в том как заменять пробел на символ "%20"
Если кто поможет, буду очень благодарен. 
sub scan_files {
    my ($base_dir, $base_url, $rules, $func, $dirs, $action) = @_;
    my (@dirs,@files,$filename,$newdir,$list,$url,$item);
    my $index; my $follow;
    my $last_filename = "";
    my $skip = 1;
    if (! $dirs) {
       $dirs = ["$base_dir"];
    }
    if ($action eq "restart") {
        ($dirs,$last_filename) = restart();
    }
    my $stop_script = 0;
    $SIG{INT} = sub { print "Ctrl-C pressed\n\n"; $stop_script = 1; };
    while (scalar @{$dirs}) {
        my $dir = pop @{$dirs};
        print "$dir - directory\n" if $cfg{verbose_output};
        my $DIR = return_fh();
        opendir($DIR,$dir) or (print "Cannot open $dir: $!\n");
        while ($item = readdir($DIR)) {
            if ($action eq "restart" && $skip == 1) {
                if ($last_filename eq "$dir/$item") { $skip = 0 }
                next;
            }
            if ($item =~ /^\./) { next }
            if ( -d "$dir/$item") {
                push(@{$dirs}, $dir."/".$item);
            }
            if ( -f "$dir/$item") {
                $filename=$dir."/".$item;
                ($url = $filename) =~ s/^$base_dir\///o;
                $url = $base_url.$url;
                ($index,$follow) = &$rules($url);
                if ($index) {
                    if ($cfg{cut_default_filenames_reg} eq 'YES') { $url =~ s|$cfg{default_filenames_reg}|/|io }
                    if ($cfg{url_to_lower_case} eq 'YES') { $url = lc($url) }
                    &$func(undef, $url, $filename, undef, undef);
                }
            }
            if ($stop_script == 1 && $action ne "archive") {
                save($dirs,$dir,$filename);
                last;
            }
        }
        closedir($DIR) or (print "Cannot close $dir: $!\n");
        last if ($stop_script == 1 && $action ne "archive");
    }
    return 1;
}

PM MAIL   Вверх
amg
Дата 27.9.2007, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Кажется, дело не в этом. У выделенной строчки не должно быть проблем с директориями, содержащими пробелы (но, боюсь, они появятся, если пробелы заменить на %20). Как ругается open? (Что в $! ?).
PM MAIL   Вверх
shamber
Дата 27.9.2007, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



может проблема в return_fh();
PM MAIL Jabber   Вверх
garataur
Дата 27.9.2007, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Вот что выдаёт скрипт. Видно, что ругается на пробелы в имени директории
это RiSearch выдаёт при индексировании....
-----------------------------------
121 -> http://garry/Словарь иностранных слов; totalsize -> 88086                                           
I can't open 'e:/www/Apache2/htdocs/Словарь' for reading                             
I can't open 'иностранных' for reading                                    
I can't open 'слов' for reading                                     
------------------------------------

PM MAIL   Вверх
garataur
Дата 27.9.2007, 17:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



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


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

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


 




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


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

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