Thread Code optimieren (9 answers)
Opened by nes at 2005-06-29 18:21

nes
 2005-06-29 18:21
#55827 #55827
User since
2005-01-24
14 Artikel
BenutzerIn
[default_avatar]
Hallo allseits,

ich muss in einer Subroutine erkennen, ob in einem Langtext div. Reg. Expressions vorkommen, wenn ja, muss ich einen vorgegebenen Kurztext zurückliefern (Siehe Codeschnippsel).

Mein Problem ist, dass die Tabelle mit den Rex.Exp die ich dazu benötige schon recht umfangreich wird ( > 300 Einträge ), und dass die Subroutine auf einen grossen Datenbestand angewandt wird => Das Teil wird schon richtig zäh und läuft im Stundenbereich.

Eh kein Wunder, bei einer Million Aufrufe des Unterprogramms a 300 Regular Expressions mach ich 300 Mio. Match-Operationen. Könnte sich das Codeschnippsel bitte jemand ansehen, und ev. den ein oder anderen Tip abgeben, wie man das beschleunigen könnte? Danke!

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
sub search_klassifizierungkurz {
my ( $word ) = @_;

my @rfTab = (
# KurzString, RegExp
[ "FWHFF", 'Feuerwehr[ \-.\/]'],
[ "FWHFF", ' FF[ \-.\/]'],
[ "FWHFF", 'Feuerw\.'],
[ "FWHFW", "Wasserwehr"],
# viele weitere Einträge ...
);

foreach my $i ( @rfTab ) {
my $suchstr = lc($i->[1]);
if ( lc($word) =~ /$suchstr/ ) {
return ($i->[0]);
}
}
return ("");
}


lg., nes

View full thread Code optimieren