|
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
|