[Vienna-pm] Suchen nach Begriffen innerhalb strukturierter Da tei

LAUN Wolfgang wolfgang.laun at alcatel.at
Wed Jan 7 04:17:05 CST 2004


> -----Original Message-----
> From: Christian Schoeller [mailto:c_p_s at gmx.net]
> Sent: Friday, January 02, 2004 10:32 PM
> To: vienna-pm at mail.pm.org
> Subject: [Vienna-pm] Suchen nach Begriffen innerhalb strukturierter Datei
> 
> -- <search.pl> --
> #!/usr/bin/perl
> use CGI qw(:standard);
> print "Content-type: text/plain\n\n";
> my $such=param('such');
> open DBASE, "<dbase";
> my $zeilen=join '', <DBASE>;
> if ($zeilen=~(/.*(Vorname.*?$such.*?\n{2}).*/is)) {
>     print $1;
> } else {
>     print "Keine Entsprechung gefunden!\n";
> }
> -- </search.pl> --
> 
> Mein Problem ist jetzt, dass "search.pl" natuerlich immer nur _einen_
> Datensatz zurueckgibt. Falls Benjamin nun heiraten sollte, wuerde
> seine Frau mit dem Suchbegriff "Bluemchen" nicht mehr gefunden werden
> (oder eben Benjamin selbst, abhaengig davon, wo er in "dbase"
> eingetragen ist).
> 
> Selbst wenn ich die RegExp mit dem Zusatz "g" versehe, funktioniert es
> nicht:
> 
> # Die Speichervariablen behalten normalerweise ihre Werte bis zum
> # naechsten erfolgreichen Mustervergleich. [1]
>

Nur damit sich hier keine falschen Meinungen über m//g festsetzen:
Selbstverständlich ist m//g in der Lage, alle Übereinstimmungen auf
einmal zu finden. Nachzulesen in perlop, m/PATTERN/cgismox, Stichwort
"list context". Der Einsatz von \G wird i.a. ratsam sein. (Dass es
im konkreten Fall Probleme mit der Abgrenzung der Datensätze gibt,
wurde schon gesagt; auch das non-greedy .*? "frisst" da leider zu viel.)

Dass m// im list context die Verwendung von $1 bis $8 (8 "liegend" ;-)
erspart, ist eine leider viel zu wenig beachtete Sache.

Wolfgang






More information about the Vienna-pm mailing list