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


ru.perl

 
 - RU.PERL ----------------------------------------------------------------------
 From : Alexander Pashchenko                 2:5062/17.212  17 Nov 2003  01:50:26
 To : All
 Subject : Как упорядочить хэш хэшей по значению ключа
 -------------------------------------------------------------------------------- 
 
 
 Есть два алгоритма.
 Один служит для генерации статистики, другой для создания отчёта из неё.
 Первый является частью файла filter.pl для тоссера HPT.
 
 Hиже привожу оба:
 sub filter
 {
 # predefined variables:
 # $fromname, $fromaddr, $toname,
 # $toaddr (for netmail),
 # $area (for echomail),
 # $subject, $text, $pktfrom, $date, $attr
 # $secure (defined if message from secure link)
 # return "" or reason for moving to badArea
 # set $kill for kill the message (not move to badarea)
 # set $change to update $text, $subject, $fromaddr, $toaddr,
 #     $fromname, $toname, $attr
   if($area=~/n5062*/i){
     local($echo_user,$val,$echo,$user);
     open(STATFILE,"<c:\\fido\\files\\statfile.dat");
     while(<STATFILE>){
       chomp;
       ($echo_user,$val)=split(':');
       ($echo,$user)=split('_',$echo_user);
       $params{$echo.'_'.$user}=$val;
     }
     close(STATFILE);
     $params{$area.'_'.$fromname}+=1;
     open(STATFILE,">c:\\fido\\files\\statfile.dat");
     foreach(sort(keys(%params))){
       /(.+)_(.+)/;
       print STATFILE $1.'_'.$2.':'.$params{$_}."\n";
     }
     close(STATFILE);
   }
   return "";
 }
 [--А это кончало filter.pl--]
 
 Этот алгоритм создаёт (импровизированную БД) файл вида:
 
 [--Это начало statfile.dat--]
 N5062.ANEKDOT_Max Istobinsky:1
 N5062.COMMERCE_Anatoliy Ivashenko:2
 N5062.COMMERCE_Dmitriy Ivanishev:1
 N5062.COMMERCE_Konstantin Klyuev:1
 N5062.COMMERCE_Sergey Korostiev:1
 N5062.COMM_Maxim Plaxin:1
 N5062.LINUX_Maxim Plaxin:1
 N5062.NETLIFE_Igor Trifonov:1
 N5062.NETLIFE_n5062c:1
 [--А это кончало statfile.dat--]
 
 где, сначала указана эха, потом через подчёркивание пользователь и через
 двоеточие кол-во писем от него в эту эху.
 
 [--Это начало stat.pl--]
 open(STATFILE,"<c:\\fido\\files\\statfile.dat");
 print "Статистика эх n5062.* за прошедшую неделю:\n\n";
 while(<STATFILE>){
   chomp;
   ($echo_user,$val)=split(':');
   ($echo,$user)=split('_',$echo_user);
   $echoes{$echo}{$user}=$val;
 }
 foreach $cur_echo (keys %echoes){
   print "Эха $cur_echo:\n";
   foreach $cur_man (keys %{$echoes{$cur_echo}}){
     print ">>$cur_man $echoes{$cur_echo}{$cur_man}\n";
   }
   print "\n";
 }
 close(STATFILE);
 
 [--А это кончало stat.pl--]
 
 Этот алгоритм должен генерить статистику используя тот файл.
 Его вывод представляет нечто подобное этому:
 [--Это начало otchet--]
 Статистика эх n5062.* за прошедшую неделю:
 
 Эха N5062.TV:
 
 >>Vitaly Pashchenko 1
 >>Alexander Maevskiy 1
 
 Эха N5062.LINUX:
 
 >>Maxim Plaxin 1
 
 Эха N5062.NEWS:
 
 >>Birthday Robot 1
 >>Sergey Tkachenko 1
 >>Alexander Chelmodeev 1
 
 Эха dummy:
 
 >>dummy 0
 
 Эха N5062.ANEKDOT:
 
 >>Max Istobinsky 1
 
 Эха N5062.COMM:
 
 >>Maxim Plaxin 1
 
 Эха N5062.COMMERCE:
 
 >>Sergey Korostiev 1
 >>Konstantin Klyuev 1
 >>Dmitriy Ivanishev 1
 >>Anatoliy Ivashenko 2
 
 [--А это кончало otchet--]
 Проблема вот в чём: *как отсортировать пользователей по кол-ву писем в каждой*
 *эхе?*
 
 Думаю, задача сводиться к сортировке значений ключей хэша перед перебором, но
 вот как это сделать не дохожу.
 
   print "Эха $cur_echo:\n";
 
 >  foreach $cur_man (keys %{$echoes{$cur_echo}}){  #<-----как здесь делать?
 
     print ">>$cur_man $echoes{$cur_echo}{$cur_man}\n";
   }
 Счастливо _All_ !
 
 ... и тишина...
 --- 1.1.5-020726
  * Origin: Меньше знаешь - крепче спишь! (2:5062/17.212)
 
 

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

 Тема:    Автор:    Дата:  
 Как упорядочить хэш хэшей по значению ключа   Alexander Pashchenko   17 Nov 2003 01:50:26 
 Re: Как yпоpядочить хэш хэшей по значению ключа   Sergey Bychkov   17 Nov 2003 14:24:46 
 Re: Как упорядочить хэш хэшей по значению ключа   Artem Chuprina   17 Nov 2003 17:23:06 
Архивное /ru.perl/38923fb7f140.html, оценка 3 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional