#!/usr/bin/perl
use strict;
use warnings;
use IO::Handle;
my $stream = IO::Handle->new;
die "Unable to open __DATA__." unless $stream->fdopen(fileno(DATA), "r");
&write_document_start;
&traverse( $stream );
&write_document_end;
sub traverse {
my ($stream, $line) = @_;
$line = $stream->getline unless defined $line;
while(defined $line)
{
chomp $line;
my ($id, $level, $text) = split /;/, $line;
my $next = $stream->getline;
my $is_empty = not defined $next;
unless($is_empty) {
chomp $next;
my ($id2, $level2, $text2) = split /;/, $next;
$is_empty = $level2 == $level;
}
&write_node($id, $level, $text, $is_empty);
unless( $is_empty )
{
&traverse( $stream, $next );
&write_node_end( $level );
$line = $stream->getline;
}
else
{
$line = $next;
}
}
}
sub write_node {
my ($id, $level, $text, $is_empty) = @_;
my $ident = "\t" x $level;
print qq~$ident\n";
}
sub write_node_end {
my ($level) = @_;
my $ident = "\t" x $level;
print "$ident\n";
}
sub write_document_start { print qq~\n~; }
__DATA__
0;0;Systemebene
1;1;Gruppe 1
2;1;Gruppe 1
5;2;Gruppe 2
5;2;Gruppe 2
601;3;Gruppe 3
60100;4;Teil