#!/usr/bin/perl use strict; # strict verwenden use warnings; # ebenso Warnungen einschalten # lese Die Sektioninfos ein my $sections = parse_file( 'section_info.x' ); for my $section_name (sort keys(%$sections)) { print "$section_name\n"; for my $file_name (sort keys(%{$sections->{$section_name}})) { print " $file_name\n"; my $data=$sections->{$section_name}->{$file_name}; $data=~s/(^|\n)/$1 /g; print "$data\n"; } print "#"x70,"\n\n" } ######################################################################## sub parse_file { my $file=shift; # wenn kein Sektorname angeben gib alle Sektoren zurück. my $sector=shift; # wenn $sector nur eine Zahl ist, den Vollständigen Namen ergänzen $sector="Sek_$sector" if(defined($sector) && $sector=~/^\d+$/); open(my $fh, '<', $file) or die("Error open $file ($!)\n"); my $ret={}; my $sector_now; my $fname=undef; my $last_line=''; while(my $line=<$fh>) { chomp($line); # Sektordefinitionen beginnen immer mit einem "Sek_" gefolgt von einer Zahl if($line=~/(Sek_\d+)/) { # Ausnahmeregelung wenn nur ein Sektor gesucht ist if($sector) { if($1 eq $sector) { $sector_now=$1 } # abbrechen wenn der Sektor vollständig gelesen wurde elsif($sector_now && $sector_now eq $sector) { last } } else { $sector_now=$1; } # $line leeren, # sonst wird später die erste Datei nicht gefunden. $line=''; $fname=undef; } # ein Sektor wurde gefunden # nun hole alle Dateinamen. # Sie stehen immer hinter einer leeren Zeile oder einer Zeile mit '....' elsif($sector_now && $line!~/^(?:\s*|\.{3,})$/ && $last_line=~/^(?:\s*|\.{3,})$/) { $fname=$line; $ret->{$sector_now}->{$fname}=''; } # alles bis zur nächsten leeren Zeile oder '....' Zeile ist der Dateinhalt elsif($sector_now && $fname && $line!~/^(?:\s*|\.{3,})$/) { $ret->{$sector_now}->{$fname}.="$line\n"; } # letzte Zeile speichern, # um später zu testen, ob sie leer ist, oder '....' enthält $last_line=$line; } close($fh); return $ret; }