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
my ($sachnummer, $kundennummer, $seriennummer, $starttest, $endetest);
my ($status, $result, $fehler, @fehler, $date, $start_pos, $end_pos);
open my $fh, '<', 'data.txt' or die $!;
while (my $line = <$fh>) {
if (!$starttest && $line =~ /(\d\d)\.(\d\d)\.\d\d(\d\d)\s+(\d\d):(\d\d):(\d\d)/) {
$date = "$3$2$1";
$starttest = "$3$2$1$4$5$6";
} elsif (!$endetest && $line =~ /(\d\d):(\d\d):(\d\d)\s+(?: P\sA\sS\sS|F\sA\sI\sL)/x) {
$endetest = "$date$1$2$3";
} elsif (!$sachnummer && $line =~ /Sachnummer:\s*AATHD(\d+)\./) {
$sachnummer = $1;
} elsif (!$kundennummer && $line =~ /Kundennummer:\s*(\d+)/) {
$kundennummer = $1;
} elsif (!$seriennummer && $line =~ /Flexnummer:\s*([0-9\.]+)/) {
$seriennummer = $1;
$seriennummer =~ s/\.//g;
} elsif ($line =~ /PASS/) {
$start_pos = tell($fh);
} elsif ($line =~ /FAIL/) {
$end_pos = tell($fh);
}
}
if ($end_pos) {
$status = '01';
$result = 'Failed';
seek($fh, $start_pos, 0);
my $hit;
while (my $line = <$fh>) {
chomp($line);
last if $hit && $line =~ /^$/;
$hit = 1 if $line =~ /^$/;
push @fehler, $line if $hit;
}
$fehler = join(' ', @fehler);
$fehler =~ s/\s+/ /g;
} else {
$status = '00';
$result = 'Passed';
}
close $fh;
print "{\@BATCH|$sachnummer||GOEPEL_BSCAN||KDSNR:$kundennummer|ICT||PB/PL_P|uqm161|||\n";
print "{\@BTEST|$seriennummer|$status|$starttest|||||n|n|$endetest||1|\n";
print "{\@RPT|$result}\n";
print "{\@RPT|$fehler}\n" if $fehler;
Bei mir funktioniert es und die Datei wird nicht komplett eingelesen.
Ich merke mir einfach die letzte Position von PASS und springe nachher
einfach nochmal dorthin.\n\n
<!--EDIT|opi|1180958789-->
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.