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


ru.perl

 
 - RU.PERL ----------------------------------------------------------------------
 From : Alexander Pashchenko                 2:5062/36      23 Nov 2004  00:51:42
 To : Andrew Alakozow
 Subject : Отсортировать список
 -------------------------------------------------------------------------------- 
 
 
 Reply to letter <09 ноя 04>, Andrew Alakozow -> Alexander Pashchenko:
 
  SC>>> Чесно говоря, не понял по какому принципу группировка идти должна. По
  SC>>> последнему символу в каждой строке (H, L и т.д.)? Если да, то 2
  SC>>> варианта
  AP>> Как раз наоборот. Hадо сгруппировать по регэкспу, и каждой группе
  AP>> присвоить свою букву.
 
 Спасибо огромное за алгоритм, хотя он конечно далеко не оптимальный  :)
 Уже содрал и использую в программке :) Еще раз спасибо!
 
 Возник интересный вопрос:
 
 1. Имеем разные эхи. К примеру:
 ru.bla-bla-bla
 ru.hardw.chainik
 ru.linux
 ru.other
 n5062.vdonsk
 ...
 ru.games
 
 2. Запускаем программу. Пока все отлично. Обрати внимание на список регэкспов
 
 [--Это начало fconf2gded.pl--]
 #/usr/bin/perl -w
 
 #use strict;
 
 #@echoes={};
 sub rec{
    my $filename = shift;
    local *F;
    open(F, '<' . $filename) || die("$filename: $!");
    while(<F>){
      if(/^include/){
        my($x)=(split(' ',$_))[1];
        rec($x);
      }
      push(@echoes,$_) if /^echoarea/i;
    }
 close(F);
 }
 
 rec($ENV{'fidoconfig'});
 
 my %grp;
 my %rex = (
             V => qr/n5062.*/i,
             H => qr/hardw/i,
             L => qr/linux|unix/i,
 
           );
 
 for my $ech (@echoes) {
   for my $let (keys %rex) {
     if ($ech =~ $rex{$let}){
       push (@{$grp{$let}}, $ech);
       $ech=undef;
     }
   }
 }
 
 foreach $l (keys(%grp)){
   foreach $e (@{$grp{$l}}){
    print "$l=$e";
   }
 }
 
 [--А это кончало fconf2gded.pl--]
 
 В результате работы этой программы получаем
 [--Это начало file.txt--]
 V=EchoArea n5062.anekdot           c:\fido2\files\Echo\n5062.anekdot V=EchoArea 
 n5062.announce          c:\fido2\files\Echo\n5062.announce V=EchoArea n5062.comm
 c:\fido2\files\Echo\n5062.comm V=EchoArea n5062.commerce         
 c:\fido2\files\Echo\n5062.commerce [skip]
 V=EchoArea n5062.weather.announce c:\fido2\files\Echo\n5062.weather.announce -b 
 H=EchoArea su.hardw.chainik        c:\fido2\files\Echo\su.hardw.chainik
 H=EchoArea su.hardw.pc.cpu         c:\fido2\files\Echo\su.hardw.pc.cpu
 H=EchoArea su.hardw.pc.motherboard c:\fido2\files\Echo\su.hardw.pc.motherboard
 H=EchoArea ru.hardw.check            c:\fido2\files\Echo\ru.hardw.check
 H=EchoArea ru.hardware.repair.tricks L=EchoArea ru.linux               
 c:\fido2\files\Echo\ru.linux L=EchoArea ru.linux.chainik       
 c:\fido2\files\Echo\ru.linux.chainik L=EchoArea ru.linux.talks         
 c:\fido2\files\Echo\ru.linux.talks L=EchoArea ru.unix                
 c:\fido2\files\Echo\ru.unix L=EchoArea ru.unix.bsd            
 c:\fido2\files\Echo\ru.unix.bsd L=EchoArea ru.unix.linux          
 c:\fido2\files\Echo\ru.unix.linux [--А это кончало file.txt--]
 
 Все правильно. Слева - группа присвоенная эхе по регэкспу. Справа - строчка из
 конфига. Перечислены только те эхи, которые попали под регэкспы.
 К примеру, у меня нет регэкспа для /games/ - следовательно и все *games* не
 попали в этот список.
 
 Hе порядок. Добавляем... Однако всего не учтешь. Остаются эхи, без регэкспов.
 Для них я хотел задать регэксп "все остальные" то бишь /.*/
 
 *Тут то и начались косяки!*
 Выяснилось, что хэш храниться не в порядке объявления, а непонятно как, хотя
 некоторая логике присутствует.
 
 Для отладки делаем:
 foreach $key (keys(%rex)){ print "$key=$rex{$key}\n"}
 
 В результате:
 
 V=(?i-xsm:n5062.*)
 O=(?i-xsm:.*)
 G=(?i-xsm:games)
 H=(?i-xsm:hardw)
 L=(?i-xsm:linux|unix)
 
 *ВОПРОС: КАК МHЕ ЗАСТАВИТЬ ХЭШ ХРАHИТЬСЯ В ПОРЯДКЕ ОБЪЯВЛЕHИЯ???*
          ИЛИ КАК МHЕ ЗАДАТЬ МАСКУ "ВСЕ ОСТАЛЬHЫЕ"???
 Заранее благодарю за ответы!
 Gxis revido _Andrew_!
 ... Win2k uptime: 0d 3h 48m 1s 803ms
 --- Phone(44373) Pager(005)3880173 E-mail(point212<at>mail.ru) ICQ(1911486)
  * Origin: В сети каждый показывает своё истинное лицо. (2:5062/36)
 
 

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

 Тема:    Автор:    Дата:  
 Отсортировать список   Alexander Pashchenko   03 Nov 2004 00:54:50 
 Отсортировать список   Serge Chervjakov   03 Nov 2004 01:33:05 
 Отсортировать список   Alexander Pashchenko   06 Nov 2004 09:40:04 
 Re: Отсортировать список   Andrew Alakozow   09 Nov 2004 11:48:42 
 Отсортировать список   Alexander Pashchenko   13 Nov 2004 16:56:28 
 Отсортировать список   Alexander Pashchenko   23 Nov 2004 00:51:42 
 Re: Отсортировать список   Andrew Alakozow   23 Nov 2004 11:53:22 
 Отсортировать список   Bulat Ziganshin   25 Nov 2004 11:48:25 
 Re: Отсортировать список   Roman V Tchemisov   03 Nov 2004 17:49:46 
Архивное /ru.perl/184541a2540f.html, оценка 1 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional