Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Perl: Общие вопросы > Замена пробела в названии директории |
Автор: garataur 26.9.2007, 16:40 |
Добрый день! Подскажите пожалуйста как проверять переменную $dir (в которой сохраняется имя директории) на наличие пробелов и, в случае присутствия оных заменять их на '%20'. Или ссылку по теме.. Спасибо заранее |
Автор: nitr 26.9.2007, 17:25 | ||
garataur, регулярные выражения... к примеру можно так ;)
|
Автор: garataur 26.9.2007, 18:14 |
Спасибо, попробую. Может распарсите мне вот такое: BEGIN { my($dir) = $0 =~ /(.*\/)/; .... что это значит? ну и сорри за тупые вопросы.. |
Автор: korob2001 26.9.2007, 19:00 | ||
Да впринципе ничего это не означает. ![]() Здесь кто-то пытается выдернуть текущий каталог и сохранить его в переменную $dir, но проблема в том, что переменная $0 хранит имя текущего скрипта, куда не входит путь к каталогу. Вобщем удаляй эту канитель и напиши следующее в начале скрипта:
Теперь мы определили текущий каталог, причём не зависимо от платформы. |
Автор: amg 27.9.2007, 05:09 | ||
|
Автор: korob2001 27.9.2007, 06:15 |
Ну тогда нужно смотреть часть программы, где используется переменная $dir. Хотя всё же советую пользоваться cwd, тогда переменная будет содержать путь к текущему каталогу без "если" и не зависимо от того, какой разделитель использует система. |
Автор: garataur 27.9.2007, 09:16 |
вот эта функция при сканировании, если в названии директории есть пробел выдаёт 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 27.9.2007, 11:49 |
Кажется, дело не в этом. У выделенной строчки не должно быть проблем с директориями, содержащими пробелы (но, боюсь, они появятся, если пробелы заменить на %20). Как ругается open? (Что в $! ?). |
Автор: shamber 27.9.2007, 14:53 |
может проблема в return_fh(); |
Автор: garataur 27.9.2007, 15:52 |
Вот что выдаёт скрипт. Видно, что ругается на пробелы в имени директории это 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 27.9.2007, 17:29 |
Спасибо всем, проблема снята |