Thread Probleme mit Ausdrücken
(21 answers)
Opened by Trommelwirbel at 2011-11-10 17:05
Ich weiß nicht ob ich dich korrekt verstanden habe.
Du hast eine Datei "elemente.txt" in der sind Standortdaten gespeichert. Eine Standort beginnt mit einer Zahl gefolgt von (nicht näher spezifizierten) unbestimmten Anzahl von Zeilen Du hast eine Datei "hq_regio_neu.txt" Die entspricht diesem Format: Code: (dl
)
1 18 5 Darin Spezifiziert ist eine Region zusammen mit einer Angabe von Zeilen. das Format dieser Speziellen Angabe ist: Code: (dl
)
<Integer Zahl><Leerzeichen><Integer Zahl> Nun willst du alle Regionsangaben aus "hq_regio_neu.txt" lesen und die entsprechende Anzahl von Zeilen des Blocks der Region aus "elemente.txt" lesen und in eine separate Datei schreiben. Ist das soweit Korrekt? Wenn ja würde ich es so implementieren: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 #!/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); Last edited: 2011-11-14 18:18:22 +0100 (CET) |