#!/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~; } sub write_document_end { 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