|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : vilfred 2:5020/400 30 Sep 2002 22:43:52 To : All Subject : подскажите рекурсивный алгоритм, запарился... --------------------------------------------------------------------------------
Привет всем!!
есть текстовый файл
из собсвенных кодов и кодов родителей
1 2 a
2 3 b
4 1 c
2 4 d
и т.п.
рекурсивно такую хрень я сделать могу, т.е. оно выведет все сразу, но
вот сделать так, чтобы выводило до нужной позиции(кликаю мышкой по
ссылке, которая директория и выводить до такого-то уровня вложенности,
на который кликнул). Т.е. как папки выводятся в виндузе, на какую
кликнул, та и вывелась... но не глубже.
алгоритм такой
циклом определяю те диры, которые имеют верхний уровень. т.е. индекс 1.
Получаю список этих дирок, далее кликаю на дирку, получаю список
поддирок для этого уровня. и т.п.
насамом деле нужно структуру таблицы рекурсивно вывести.
скрипт такой:
$url="lesenka.pl";
sub show_base{
@row=@_; my @l=split /\|/ => $pr;
#step1#
@m = sort grep {!$_{$_}++} map {/^.*?#.*?#(.*?)#/} @row;
#step2#
foreach my $l(@row){ $l=~s!(\s)\1+|(\t)+|[\cM\cJ\n]!!g;
my @tmp1= split /#/ => $l;
do{print qq~<a href=$url?id_self=$tmp1[0]&path=\|$tmp1[0]>$tmp1[7]
</a><br>\n~
if $tmp1[3] == 1;
print qq~$tmp1[7]~ if $tmp1[3] == 0;
&view($tmp1[0], " ") if $tmp1[3] == 1 and $id_self
ne '';
} if $tmp1[2]==$m[0];
}
sub view{ my $self=$_[0]; $t=$_[1]; my @l=split /\|/ => $pr;
foreach my $k(@row){
my @tmp = split /#/ => $k;
do{print qq~$t<a href=$url?id_self=$tmp[0]&path=$pr|$tmp[0]>$tmp
[7]</a><br>\n~
if $tmp[3] == 1;
&view($l[$#l]) if $l[$#l] != $id_self;
#print "<b>!$tmp[1] = $l[$#l]!</b>";
} if $self eq $tmp[1] and $self eq $l[$#l];
}
}
}
глубин вложенности собираюсь отследить при помощи переменной path:
lesenka.pl?id_self=2815&path=|23|2815
т.е. запускать рекурсию до глубины последней цифры, например |2815...
первый цикл фореач выводит самые верхние две ссылки. Я уже офигел это
делать, могд не едет... как тут быть?
Спасибо!
Дима
--
TEAM [Маньяки]
Отправлено через сервер Форумы@mail.ru - http://talk.mail.ru
--- ifmail v.2.15dev5
* Origin: Talk.ru (2:5020/400)
Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/6488aec2c5d5.html, оценка из 5, голосов 10
|