Hallo allerseits :)Sorry, wahrscheinlich ist die Lösung ganz simpel, aber ich bin eben noch ziemlich neu beim Perl-Programmieren.
Ich habe eine Frage bezügl. regulären Ausdrücken:
Ich möchte eine Datei anhand bestimmter Ausdrücke filtern, bzw. suche ich bestimmte Zeilen mit den gewünschten Keywords (siehe Bsp. unten TRIALID) und greife dann Werte in der jeweiligen Zeile ab (z.b. F-35-wig). Die Zeile lese ich dabei als array ein, ist einfacher meine Werte zu finden. Die gefundenen Werte gebe ich dann formatiert nebeneinander in Spalten aus.
Bsp.: "MSG 9179 TRIALID F-35-wig"
Das klappt soweit ganz ganz gut bis ich zu der Stelle komme, wo ich in Zeile mit Keyword "BUTTON" oder "EFIX" eine Zahl abgreifen will. Das Problem ist, dass genau identische Zeilen aufeinander folgen und mir immer wieder ein Wert ausgegeben wird, den ich aber gar nicht haben möchte. Ich will es nur EINMAL. Aber irgendwie kriege ich das mit der Abbruchbedingung nicht hin.
Die Datei, die ich filtern möchte, besteht aus mehreren Blöcken mit jeweils folgender Struktur:
MSG 2532741 TRIALID F-10
MSG 0 SYNCTIME
EFIX R -45 289 336 514.5 383.9
EFIX R 339 497 160 793.4 396.0
MSG 1978 fix_out_change
MSG 1985 CHANGE
EFIX R 1763 2149 388 167.8 488.3
EFIX R 2215 2357 144 765.9 390.8
EFIX R 2383 2789 408 829.7 398.5
EFIX R 4803 4937 136 498.1 248.3
EFIX R 4959 5421 464 489.5 205.9
BUTTON 5520 6 1
EFIX R 5471 5593 124 754.3 338.9
BUTTON 5676 6 0
EFIX R 5639 6017 380 515.5 260.7
MSG 6084 TRIAL_RESULT 0
Ich hänge mal einen Code-Schnipsel an...
Bin für jeden Tipp dankbar!
Ich komme einfach alleine nicht mehr weiter.
Herzlichen Dank!!
[code]
use strict;
use warnings;
my @line=$_;
while(<FILE>){
@line = split(/\s+/);
chomp;
foreach ($_ =~ /TRIALID.*/g){
print "\n";
printf ("%-17s", $line[-1]);
} {
if($_ =~ /^MSG\s+\d*\s+fix_out_change/o) {
my %fixout = ( FIXOUT => $line[1], FIXIN => '0' );
printf ("%-8s", $fixout{'FIXOUT'});
printf ("%-8s", $fixout{'FIXIN'});
}
elsif($_ =~ /^MSG\s+\d*\s+fix_in_no_change/o) {
my %fixin = ( FIXOUT => '0', FIXIN => $line[1] );
printf ("%-8s", $fixin{'FIXOUT'});
printf("%-8s", $fixin{'FIXIN'});} {
if ($_ =~ /^BUTTON/o){
printf ("%-8s", $line[1]);
}
} last;
}
}
[\code]
Datum: 18.10.2007-16:35
