Ik heb een Perl script geschreven die substring matching doet met 2 XML bestanden. Wanneer ik de script run, dan krijg ik mijn output wel in de shell, maar wanneer ik het wil opslaan in een file (perl script.pl > file), dan krijg ik alleen maar een leeg bestand. Ik zie de fout of glitch niet, en Perl geeft ook geen foutmelding. Kan iemand mij helpen? Bedankt!
code:
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
| my @orphans2 = </xmlfiles/*>;
for(my $i = 0 ; $i < @orphans2 ; $i++) {
my $filehandle = join "", $orphans2[$i];
open($filehandle, "<$orphans2[$i]") or die("Could not open $!");
my ($file) = $orphans2[$i] =~ /.*\/(\d+.xml)/;
#####################################
# Keeping track of the path (tags) #
#####################################
my %path = ();
my @tags = ();
my @orphanPage = <$filehandle>;
close($filehandle);
for(my $c = 0 ; $c < @orphanPage ; $c++) {
my $line = $orphanPage[$c];
chomp($line);
if ($line =~ /\<name/) {
my $name = $orphanPage[$c+1];
chomp($name);
print STDOUT "<topic file=\"$file\" name=\"$name\">\n";
}
if($line =~ /<(\w+\d*).*>/gi) {
my $tag = $1;
push(@tags, $tag);
$path{$tag}++;
}
if($line =~ /<\/\w+\d*>/gi) {
pop(@tags);
}
my $path = "";
my $oldtag = "";
foreach my $tag ( @tags ) {
$oldtag = "/$tag\[$path{$tag}\]";
$path = join "", $path, $oldtag;
}
$line =~ s/<[\/?]?\w+\d*(\w+[".:=\/?-]*\s*)*>/ /gi;
my @targetFiles = <../Anchors/$file/*>;
for(my $b = 0 ; $b < @targetFiles ; $b++) {
my @tags2 = ();
my %path2 = ();
my $filehandle2 = join "", $targetFiles[$b];
open($filehandle2, "< $targetFiles[$b]") or die("Could not open $!");
my ($targetFile) = $targetFiles[$b] =~ /.*\/(\d+.xml).*/gi;
#print "$targetFile\n";
my @targetFileLines = <$filehandle2>;
close($filehandle2);
for(my $t = 0 ; $t < @targetFileLines ; $t++) {
my $line3 = $targetFileLines[$t];
if($line3 =~ /<(\w+\d*).*>/gi) {
my $tag = $1;
push(@tags2, $tag);
$path2{$tag}++;
}
if($line3 =~ /(<\/\w+\d*)>/gi) {
pop(@tags2);
}
my $path2 = "";
my $oldtag2 = "";
foreach my $tag2 ( @tags2 ) {
$oldtag2 = "/$tag2\[$path2{$tag2}\]";
$path2 = join "", $path2, $oldtag2;
}
if($line3 =~ /^<name/gi) {
my $title = $targetFileLines[$t+1];
chomp($title);
my $posStart = index $line, $title;
while($posStart > -1) {
my $posEnd = length($title) + $posStart;
##### PRINT WEL NAAR SHELL, NIET NAAR FILE
print "$posStart - $file - $path - $targetFile - $path2 - $line - $title\n";
$posStart = index $line, $title, $posStart+1;
}
}
}
}
}
} |