|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Alexander Pashchenko 2:5062/36 23 Nov 2004 01:03:10 To : All Subject : Сортировка эх --------------------------------------------------------------------------------
Программа для конвертации fidoconfig (описания эх) в goldarea.inc (пока просто в
файл пишет)
[--Это начало fconf2gded.pl--]
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.comm c:\fido2\files\Echo\n5062.comm V=EchoArea
n5062.commerce c:\fido2\files\Echo\n5062.commerce 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
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.unix.bsd L=EchoArea ru.unix.linux
c:\fido2\files\Echo\ru.unix.linux [--А это кончало file.txt--]
В выход программы попали только эхи подпадающие под перечисленные регэкспы.
Остальные не попали никуда :)
Hепорядок. Хочу, чтобы эхи без регэкспов (все остальные) имели группу, к примеру
O. Добавляю регэксп /.*/ (все остальные по моему разумению).
*Тут то и начались косяки!*
Выяснилось, что хэш храниться не в порядке объявления, а непонятно как, хотя
некоторая логика присутствует.
Для отладки делаем:
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 _All_!
... Win2k uptime: 0d 3h 48m 1s 803ms
--- Phone(44373) Pager(005)3880173 E-mail(point212<at>mail.ru) ICQ(1911486)
* Origin: В сети каждый показывает своё истинное лицо. (2:5062/36)
Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/184541a2551c.html, оценка из 5, голосов 10
|