#!/usr/bin/perl use strict; use warnings; my $elemente_file='elemente.txt'; my $region_file='hq_regio_neu.txt'; #----------------------------------------------------------------------- # Laden der Elemente # ein Element ist eine Zahl getrenn von einem Leerzeigen und noch einer Zahl # In keinen der zahlen darf ein "." vorkommen # alle gefunden Elemente in einen hash # der zweite Parameter ist als Wert der erste als Schlüssel my %elemente; open(my $elemente_fh, '<', $elemente_file) or die ("ERROR open $elemente_file ($!)\n"); while(my $line=<$elemente_fh>) { chomp($line); $elemente{$1}=$2 if($line=~/^(\d+)\s+(\d+)/) } close($elemente_fh); # öffe das zu durchsuchende Dokument # Der Schlüsselpunkt ist eine Zeile die mit einer Zahl beginnt open(my $in_fh, '<', $region_file) or die ("ERROR open $elemente_file ($!)\n"); # Anzahl der Zeilen, die in die neue Datei gescchrieben werden sollen. my $count=0; # Das FileHandle der neuen Datei my $out_fh=undef; # Alle Zeilen lesen while(my $line=<$in_fh>) { # wenn eine Zeile eine Zahl ist if($line=~/^(\d+)/) { my $name=$1; # gibt es diese Zahl im Hash? if(exists($elemente{$name})) { # Datei öffnen if(open($out_fh, '>', "$name.out.txt")) { # Den Zähler für die nächsten Zeilen setzen $count=$elemente{$name}; } else { # Warnung wenn die Datei nicht geöffnet werden konnte warn("WARNING error opnen $name.txt ($!)\n"); $out_fh=undef; } } } # wenn die datei geöffnet und Noch zeilen zu schreiben sind # dann schreibe die Zeile in die datei und erniedrige den Zähler elsif($count>0 && defined($out_fh)) { print $out_fh $line; $count--; } } close($in_fh);