Автор Тема: Плиз! Что-то заработался!  (Прочитано 2718 раз)

0 Пользователей и 1 Гость просматривают эту тему.

  • Гость
Плиз! Что-то заработался!
« : 25 Января 2002, 11:31:38 »
Столько уже скриптов написал за свою жизнь! Всё получалось и сложное и не очень! А вот простой преметив решить что-то не могу! (За книгой в лом пока идти) Вообщемнужно просканить директорию и показать юзеру все диры которые есть в текущей дире. (Файлов не надо)!  Как вывести все файлы я знаю глобом можно. А мне надо именно дериктории и больше ничего! Прешите кусок плиз.... Чтоб мне в книгу не лезть!

  • Гость
Плиз! Что-то заработался!
« Ответ #1 : 25 Января 2002, 12:39:19 »
opendir(D,\'.\');
@all=readdir D;
closedir(D);

@dirs;

foreach $elem(@all)
{
    if($elem =~ m/(\\.){1,2}/)
    {
         next;
    }
    if(-d $elem)
    {
        push @dirs,$elem;
    }
}

И всё. В @dirs - директории

Оффлайн Chs

  • Perl программер
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1108
  • +0/-0
  • 2
    • Просмотр профиля
    • http://chs.now.at/
Плиз! Что-то заработался!
« Ответ #2 : 25 Января 2002, 13:24:13 »
Цитировать

if($elem =~ m/(\\.){1,2}/)
{
next;
}


:):) Одна из самых распространенных ошибок - игнорируются директории (файлы) содержащие в названии точку.
2B OR NOT 2B = FF

Оффлайн Oak

  • Дерево
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1481
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Плиз! Что-то заработался!
« Ответ #3 : 25 Января 2002, 17:48:35 »
А надо ^\\. ? (заодно будет прятать hidden файлы)
[основной броузер - SeaMonkey] Netscape Communicator 4 - is the best :) // see sources

Оффлайн Green Kakadu

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2757
  • +1/-0
  • 0
    • Просмотр профиля
    • http://gnezdo.webscript.ru
да не
« Ответ #4 : 26 Января 2002, 00:38:57 »
Цитировать
А надо ^\\. ?

ведь директория может быть и такой:
.dir
просто
if($elem =~ m/(\\.){1,2}/)
{
next;
}

можно смело выкинуть. Очевидно, чел-к хотел (помимо файлов) отсеять . и ..
можно было это сделать вначале:
(undef, undef,@all)=readdir D;
 в исканиях.

Оффлайн markers

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 1
  • +0/-0
  • 0
    • Просмотр профиля
    • http://markers.h1.ru
Всё по другому!
« Ответ #5 : 26 Января 2002, 09:51:14 »
Спасибо вам! Но ваш код показывает лишь последнюю папку! Но это не важно.Там видно просто ошибка в цикле! Я уже сделал алгоритм(вернее взаимствовал) он более сложнее но работает как часы! Вот он!

    opendir (DIR, $directory) or &cgierr ("Не возможно открыть папку: \'$directory\'.\\nСообщение: $!");
    my @ls = readdir(DIR);
    closedir (DIR);
    FILE: foreach $file (@ls) {
        next FILE if  ($file eq \'.\');
        next FILE if ($file eq \'..\');

        $fullfile = "$directory/$file";
        if (-d $fullfile ) {
                $directory{$file} .= qq~$file\\n~;
            }
    }
    foreach (sort keys %directory) {
        push (@dirs,$directory{$_});
    }

Вот вроде этого!
Будут предложения по улучшению! Пишите я всё учту!
Да и есть у кого-нибудь хороший чат с внешними настройками?
Всем спасибо! Пока!
С уважением Цегельников Александр!

Оффлайн Green Kakadu

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2757
  • +1/-0
  • 0
    • Просмотр профиля
    • http://gnezdo.webscript.ru
вот
« Ответ #6 : 26 Января 2002, 14:25:51 »
#!/usr/bin/perl
my $dir=\'/home\';#путь к директории
my (@in_dir, @dirs);
opendir (DIRS, $dir)||die("Can not opendir, reason  $!");
(undef,undef, @in_dir)=readdir(DIRS);
closedir DIRS;
foreach my $elm(@in_dir){
   if (-d "$dir/$elm"){push(@dirs, $elm);}
}
print @dirs;
 в исканиях.

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28