![]() |
Модераторы: korob2001, ginnie |
![]() ![]() ![]() |
|
garataur |
|
|||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 26.9.2007 Репутация: нет Всего: нет |
Добрый день!
Подскажите пожалуйста как проверять переменную $dir (в которой сохраняется имя директории) на наличие пробелов и, в случае присутствия оных заменять их на '%20'. Или ссылку по теме.. Спасибо заранее |
|||
|
||||
nitr |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2543 Регистрация: 10.2.2006 Где: Россия :) Репутация: 37 Всего: 84 |
garataur, регулярные выражения...
к примеру можно так ;)
|
|||
|
||||
garataur |
|
|||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 26.9.2007 Репутация: нет Всего: нет |
Спасибо, попробую.
Может распарсите мне вот такое: BEGIN { my($dir) = $0 =~ /(.*\/)/; .... что это значит? ну и сорри за тупые вопросы.. |
|||
|
||||
korob2001 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 31 Всего: 61 |
Да впринципе ничего это не означает.
![]() Здесь кто-то пытается выдернуть текущий каталог и сохранить его в переменную $dir, но проблема в том, что переменная $0 хранит имя текущего скрипта, куда не входит путь к каталогу. Вобщем удаляй эту канитель и напиши следующее в начале скрипта:
Теперь мы определили текущий каталог, причём не зависимо от платформы. -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
|||
|
||||
amg |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1145 Регистрация: 3.8.2006 Где: Новосибирск Репутация: 38 Всего: 50 |
||||
|
||||
korob2001 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 31 Всего: 61 |
Ну тогда нужно смотреть часть программы, где используется переменная $dir. Хотя всё же советую пользоваться cwd, тогда переменная будет содержать путь к текущему каталогу без "если" и не зависимо от того, какой разделитель использует система.
-------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
|||
|
||||
garataur |
|
|||
Новичок Профиль Группа: Участник Сообщений: 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; } |
|||
|
||||
amg |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1145 Регистрация: 3.8.2006 Где: Новосибирск Репутация: 38 Всего: 50 |
Кажется, дело не в этом. У выделенной строчки не должно быть проблем с директориями, содержащими пробелы (но, боюсь, они появятся, если пробелы заменить на %20). Как ругается open? (Что в $! ?).
|
|||
|
||||
shamber |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1422 Регистрация: 5.9.2006 Где: Россия Репутация: 17 Всего: 18 |
может проблема в return_fh();
|
|||
|
||||
garataur |
|
|||
Новичок Профиль Группа: Участник Сообщений: 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 ------------------------------------ |
|||
|
||||
garataur |
|
|||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 26.9.2007 Репутация: нет Всего: нет |
Спасибо всем, проблема снята
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Perl" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |