Thread Aus Liste Baum erzeugen *war Tabelle / Tree (7 answers)
Opened by Mayflow at 2010-11-26 04:44

topeg
 2010-11-26 16:06
#143076 #143076
User since
2006-07-10
2611 Artikel
BenutzerIn

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

View full thread Aus Liste Baum erzeugen *war Tabelle / Tree