Thread Probleme mit Ausdrücken
(21 answers)
Opened by Trommelwirbel at 2011-11-10 17:05
ok, hier ist mal ein ausschnitt aus der datei - die insgesamt etwas über 8500 zeilen hat.
Das Markierte ist ein $element. Die Elemente sind einfach eine Standortbezeichnung, die als Zahl gegeben sind. Diese Zahlen sind dann auch der gesuchte Ausdruck. Für jedes Element, besteht in dieser Liste genau einmal das gewüschte Profil. Das Element und dann ein Leerzeichen, dies ist immer nur in der Elementenzeile der Fall. In den anderen Zeilen, kann z.B. die 18 nur in Kombination mit einem "." oder Zeilemumbruch stehen. Problem ist, dass im Moment die 518 zum Beispiel auch ausgegeben wird. Soll es aber nicht. 18 5 2 1.35 5 3.25 10 5.4 25 9.63 50 14.3 19 5 2 1.53 5 3.65 10 6.04 25 10.71 50 15.84 21 5 2 1.72 5 4.1 10 6.82 25 12.28 50 18.4 29 5 2 0.7 5 1.87 10 3.4 25 6.89 50 11.3 33 5 2 0.91 5 2.39 10 4.31 25 8.66 50 14.12 37 5 2 1.3 5 3.26 10 5.69 25 11.01 50 17.47 41 5 2 1.78 5 4.33 10 7.37 25 13.7 50 21.07 46 5 2 2.24 5 5.3 10 8.89 25 16.26 50 24.73 Das ist im Moment der Code, der eine Elemente Liste erstellt und dann für jedes $element die Datei durchgehen soll. Das funktioniert auch soweit, nur leider Erkennt er auch andere in dem Ausdruck, wie gesagt, die Zeilen von 518 gibt er auch aus zum Beispiel. 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 use strict; use warnings; my (@elemente) = (); # Erzeugen einer leeren Liste my $element; my $y=0; open (IN_elements , "<elemente.txt"); # öffnet Txt - Datei in denen alle Elemente stehen while(<IN_elements>){ # Schleife weist jedem Element einen Listenplatz zu chomp; $element = substr($_,0,4); $elemente[$q] = $element; $q += 1; } foreach $element(@elemente){ open (Out,">>$element.txt"); open (IN , "<hq_regio_neu.txt"); my $num = 0; while ( my $line = <IN> ) { if ( $num == 0 && $line =~ m/$element (\d+)/ ) { $num = $1;} elsif ( $num > 0 ) { print Out $line; $num--; } } } Last edited: 2011-11-14 14:57:08 +0100 (CET) |