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

topeg
 2010-11-26 09:12
#143057 #143057
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
Das hat wenig mit HTML::Treebuilder zu tun.
Ist aber nicht weiter schwer:
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;

my %tree=();

# baum erstellen
while(my $line=<DATA>)
{
  chomp($line);
  $line=~s/^\s+//;
  $line=~s/\s+$//;
  my @elm=split(/\s+/,$line);
  my $ref=\\%tree;
  $ref=\$$ref->{$_} for(@elm);
  $$ref={} unless($$ref);
}

# baum darstellen
print create(\%tree);

sub create
{
  my $tree=shift;
  my $deep=shift || '';
  my $line=shift || [];
  my $ret='';
  for my $key (sort keys(%$tree))
  {
    my @in=(@$line,$key);
    my $ref=$tree->{$key};
    if(keys(%$ref))
    {
      $ret.=qq($deep+@in<span id=").join('',@in).qq(">\n);
      $ret.=create($ref,"$deep    ",\@in);
      chomp($ret);
      $ret.="</span>\n";
    }
    else
    { $ret.="$deep@in\n"; }
  }
  return $ret;
}

__DATA__
A
  A A
  A B
  A C
  A D
B
  B A
  B B
  B C
C
  C A
  C B
  C C
  C D
  C E
D
  D A
    D A A
    D A B
    D A C
    D A D
  D B
  D C
  D D
    D D A
    D D B
    D D C
    D D D
E
  E A
  E B
F
  F A
  F B
  F C
  F D
  F E
  F F
  F G
  F H
  F I
  F J
  F K
  F L
  F M
  F N
  F O
  F P
  F Q

Das Parsen erfolgt seriell, da jede Zeile alle nötigen Informationen hat um seinen Platz im Baum zu bestimmen. Das erstellen der Ausgabe ist rekursiv.

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