schonwieder so ein blödes regex-kuddelmuddel der mir seit stunden Nerven kosten:
Habe eine Datei mit Schulen die etwas merkwürdig konstruiert ist (nicht von mir)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
NAME DER SCHULE
Halbachschule
Gesamtschule
STADT
Duisburg
NAME DER SCHULE
Erich-Kästner Gesamtschule
mit Förderschule
STADT
Augsburg
NAME DER SCHULE
Albert-Schweitzer-Schule
Städt. Ev. Grundschule
mit angeschlossener Musikschule
STADT
Bonn
Grundsätzlich muss man wissen:
Der Name der Schule ist immer die nächste Zeile nach "NAME DER SCHULE".
Danach folgt irgendein Text der die Schule beschreibt oder sonstige Infos zu der Schule enthält. Dieser Text hat oft mehrere Zeilen.
Mein Ansatz war folgender:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
use strict;
chdir("/srv/www/projekt/schulen")
|| die "Fehler: $!\n";
local(*FH, $/);
open FH, "test.txt"
|| die "Fehler: $!\n";
my $file = <FH>;
my @rows = $file =~ /NAME DER SCHULE([a-zA-Z_0-9\s\-\n\r\.üöäß]+)STADT/g;
my $counter = 0;
for (@rows) {
$counter++;
print "$counter\t$_\n";
}
Das gibt mir folgendes Ergebnis:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
localhost:/home/frosch/scripts # perl schools.pl
1
Halbachschule
Gesamtschule
STADT
Duisburg
NAME DER SCHULE
Erich-Kästner Gesamtschule
mit Förderschule
STADT
Augsburg
NAME DER SCHULE
Albert-Schweitzer-Schule
Städt. Ev. Grundschule
mit angeschlossener Musikschule
Warum findet er nur einen Treffer????
In der for-Schleife will ich jeweils die Infos zu der Schule haben, also alles zwischen "NAME DER SCHULE" und "STADT"