Oh je, warum hast du nicht das Codestück - die while Schleife - ersetzt,
die ich dir gepostet habe? In der Schleife wird genau bis $end_pos gelesen.
Kein Wunder, das es nicht funktioniert! Hier nochmal das Ganze Stück...
bei mir funktioniert es mit beiden Dateien, die du bislang gepostet hast.
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
use strict;
use warnings;
my ($sachnummer, $kundennummer, $seriennummer, $starttest, $endetest);
my ($status, $result, $fehler, @fehler, $date, $start_pos, $end_pos);
open my $fh, '<', 'data1.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 $end_pos <= tell($fh);
$hit = 1 if $line =~ /^\z/;
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;
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.