#! /usr/bin/perl use strict; use warnings; ### sub routines ############################################################ sub read_elements { my $file = shift; my @elements; open my $infh, '<', $file or die "open(ro,$file) failed: $!\n"; while ( my $line = <$infh> ) { chomp $line; push @elements, substr( $line, 0, 4 ); } close $infh; return @elements; } # lese Regio-Datei ein; fuer jeden definierten Standort werden die ihm # nachfolgenden zeilen eingelesen # die gelesenen Daten werden in einem Hash-of-Arrays (HoA) abgelegt; als # Schluessel wird die Standort-Kennzahl verwendet, als Value wird eine # Referenz auf einen Array mit den Standortdaten abgelegt # siehe auch dokumentation: perldoc perldsc sub read_regio { my $file = shift; my %regio; my ( $regio, $lines, @values ); open my $infh, '<', $file or die "open(ro, $file) failed: $!\n"; while ( my $line = <$infh> ) { chomp $line; if ( $line =~ m/^(\d+)\s+(\d+)$/ ) { $regio = $1; $lines = $2; } elsif ( defined( $regio ) && $lines > 0 ) { push @{ $regio{$regio} }, $line; $lines--; } } close $infh; return %regio; } ### main programm ########################################################### my @elements = read_elements( "elemente.txt" ); my %regio = read_regio( "hq_regio_neu.txt" ); # zur Kontrolle bei Entwicklung #use Data::Dumper; #print Data::Dumper->Dump( # [ \@elements, \%regio ], [ qw( elements regio ) ] #); for my $element ( @elements ) { my $file = "$element.txt"; # ueberschreibendes Schreiben open my $outfh, '>', $file or die "open(w, $file) failed: $!\n"; # anhaengendes Schreiben #open my $outfh, '>>', $file or die "open(w+, $file) failed: $!\n"; print $outfh join( "\n", @{ $regio{$element} } ); close $outfh or die "close(w+, $file) failed: $!\n"; } __END__