Главная страница


ru.perl

 
 - RU.PERL ----------------------------------------------------------------------
 From : Konstantin Stupnik                   2:5020/400     17 Jul 2001  12:37:50
 To : All
 Subject : Re: Ускорить выполнение
 -------------------------------------------------------------------------------- 
 
 "Nikolay Pichtin" <Nikolay.Pichtin@f30.n5056.z2.fidonet.org> wrote in
 message news:995320505@f30.n5056.z2.ftn...
 
 >                            Добрый вечер Konstantin !
 >
 >
 >  >> Есть скрипт, который читает каталог и отбирает
 >  >> имена файлов по расширению.
 >  >> Можно-ли оптимизировать скрипт с целью ускорения работы?
 >  >>
 >  >> if ( opendir (DIR, "$full_upload_dir") ) {
 >  >>   @dirs = map {/(.+)/} sort {$a <=> $b} readdir(DIR);
 >
 >  KS> Это что за загадочная строка????
 >  KS> Кто тебя такому научил?
 >  KS> 1) <=> сравнивает ЧИСЛА. Для строк есть cmp.
 >
 > Все правильно. У меня имена каталогов числовые.
 
 Hо, если уж речь зашла об ускорении выполнения,
 то с cmp будет быстрее.
 
 >  KS> 2) зачем map??? Или это очередной способ удаления гланд
 >  KS> через задний проход?
 >  KS> 3) а вообще зачем sort именно тут?
 >  KS> лучше уж результат отсортировать.
 >  KS> Там, теоретически, меньше сортировать.
 >
 > Согласен.
 >
 >  >> closedir (DIR);
 >
 > [Skip]
 >
 >  KS> foreach $file(@dirs)
 >  KS> {
 >  KS>   my ($name,$ext)=$file=~/^(.*)\.(.*)$/;
 >  KS>   push @files,$name,$ext if($typs{$ext});
 >  KS> }
 >  KS> @files=sort @files;
 >
 > Спасибо за ответ, но не проходит. Т.к. в каталоге
 > есть файлы с разными именами, но одним расширением.
 > Их надо сортировать так, чтобы сначала все одни расширения,
 > затем другие и т.д.
 
 Hу, я ж не телепат, что б заранее предугадать,
 то, как тебе надо :)
 Хотя я чуток лажанулся. У тебя в массив зачем-то еще
 и расширения складывались...
 Может так:
   push @files,{name=>$name,ext=>$ext} if $ $typs{$ext};
 }
 @files=sort {$a->{ext} eq $b->{ext}?$a->{name} cmp $b->{name}:
 
 $a->{ext} cmp $b->{ext}} @files;
 
 > Я извратился так:
 >
 > if ( opendir (DIR, "numers/2001") ) {
 >   @dirs = map {/(\d+)/} sort {$a <=> $b} readdir(DIR);
 > closedir (DIR);
 
 > $dir_numer = $dirs[-1]; # Это для того, чтобы читать все каталоги, но
 > }                       # затем обрабатывать только с самым старшим
 
 номером
 А зачем их вообще тогда все в массив пихать?
 
 > @link_file = <numers/2001/$dir_numer/*>; # Вот здесь бы вместо * как-то бы
 >                                          # ограничить просмотр
 
 Hу только глоббинга еще и не хватало.
 /(open|read|close)dir/ было более правильным решением :)
 
 > s/numers\/2001\/$dir_numer\/// foreach (@link_file);
 
 Если в RE часто используются /, стоит
 использовать другой разделитель.
 s!numers/2001/$dir_numer/!! for(@link_file);
 чуток добавит читабельности.
 
 > @link_files = sort { ($a =~ /(.*)\.(.*)/)[1] cmp ($b =~ /(.*)\.(.*)/)[1] }
 > @link_file;
 
 Это отсортирует только по расширению.
 Для каждого расширения файлы остануться unsorted.
 И я бы не рекомендовал так делать.
 Сделается O(n*log(n)) сравнений.
 И для каждого сравнения будет делаться 2 RE матча!
 Посмотри пример выше.
 
 --
 Best regards,
   Konstantin.
 Brainbench MVP for perl.
 Отправлено через сервер Talk.Ru - http://www.talk.ru
 --- ifmail v.2.15dev5
  * Origin: Talk.Ru (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Ускорить выполнение   Nikolay Pichtin   16 Jul 2001 10:10:29 
 Re: Ускорить выполнение   Anatoly Moskovsky   16 Jul 2001 12:15:08 
 Re: Ускорить выполнение   Konstantin Stupnik   16 Jul 2001 12:41:41 
 Re: Ускорить выполнение   Nikolay Pichtin   16 Jul 2001 21:47:09 
 Re: Ускорить выполнение   Konstantin Stupnik   17 Jul 2001 12:37:50 
 Ускорить выполнение   kan   17 Jul 2001 09:50:36 
 Re: Ускорить выполнение   HB   18 Jul 2001 12:02:22 
 Ускорить выполнение   kan   22 Jul 2001 08:55:43 
 Re: Ускорить выполнение   Igor Nikolaev   17 Jul 2001 03:48:55 
 Re: Ускорить выполнение   Nikolay Pichtin   17 Jul 2001 08:23:30 
 Re: Ускорить выполнение   Igor Nikolaev   18 Jul 2001 02:54:07 
 Re: Ускорить выполнение   Nikolay Pichtin   19 Jul 2001 00:46:33 
 Re: Ускорить выполнение   Igor Nikolaev   25 Jul 2001 03:34:58 
 Ускорить выполнение   Aleksey Kotov   17 Jul 2001 23:09:56 
 Re: Ускорить выполнение   Igor Nikolaev   18 Jul 2001 03:05:47 
Архивное /ru.perl/648855b9617a.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional