Thread Aus Liste Baum erzeugen *war Tabelle / Tree
(7 answers)
Opened by Mayflow at 2010-11-26 04:44
So geht es am einfachsten:
Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 #!/usr/bin/perl use strict; use warnings; my %tree=(); my %txt=(); # baum erstellen while(my $line=<DATA>) { chomp($line); my $text=''; ($line,$text)=$line=~/\s*([^\|]+?)\|(.+?)\s*$/; my @elm=split(/\s+/,$line); $txt{"@elm"}=[split(/\s*\|\s*/,$text)]; my $ref=\\%tree; $ref=\$$ref->{$_} for(@elm); $$ref={} unless($$ref); } # baum darstellen print create(\%tree,\%txt); sub create { my $tree=shift; my $txt=shift; my $deep=shift || ''; my $line=shift || []; my $ret=''; for my $key (sort keys(%$tree)) { my @in=(@$line,$key); my $text=$txt->{"@in"}; $text=[] unless($text); $text=join("--",@$text); my $ref=$tree->{$key}; if(keys(%$ref)) { $ret.=qq($deep+@in ($text) <span id=").join('',@in).qq(">\n); $ret.=create($ref,$txt,"$deep ",\@in); chomp($ret); $ret.="</span>\n"; } else { $ret.="$deep@in ($text)\n"; } } return $ret; } __DATA__ A|text|link|expandet A A|text|link A B|text|link B|text|link|nonexpandet B A|text|link B B|text|link B B A|text |