[Vienna-pm] Suchen nach Begriffen innerhalb strukturierter Datei
Thomas Klausner
domm at zsi.at
Fri Jan 2 17:52:26 CST 2004
Hi!
On Fri, Jan 02, 2004 at 10:31:52PM +0100, Christian Schoeller wrote:
> Ich habe hierzu eine Webseite mit zwei Formularen: im einen sind
> (Vorname|Nachname|Strasse|PLZ|Wohnort) einzugeben; diese Daten werden
> - schoen formatiert - in der Textdatei "dbase" abgespeichert. Im
Warum nicht in einer richtigen DB? Wenn eine DB installieren zu muehsam ist,
kann ich zB SQLite sehr empfehlen
http://search.cpan.org/~msergeant/DBD-SQLite-0.29/
ist eine "richtige" SQL-DB, die aber alles in einem file speichert & keinen
Server braucht.
> -- <dbase exemplarisch> --
> Vorname: Benjamin
> Nachname: Bluemchen
> Strasse: Zuckerstueckchenstrasse 1
> PLZ: 0101
> Ort: Neustadt
> -- </dbase> --
Hmm. Wie werden einzelne Eintraege getrennt?
Wenn schon flat file, dann wuerde ich YAML als Format nehmen:
http://search.cpan.org/~ingy/YAML-0.35/
Oder XML, aber das ist IMO muehsam und overhyped.
> -- <search.pl> --
> #!/usr/bin/perl
use warnings;
use strict;
> 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).
Ja, anders geht das wohl kaum, wenn du das so machst.
> Moeglicherweise liege ich allerdings auch _komplett_ falsch und mein
> Skript hat sowieso den falschen Ansatz.
Sorry, aber das sehe ich auch so :-)
Ich empfehle:
my @hits;
foreach my $datum (@datensaetze) {
push(@hits,$datum) if $datum=~/$such/;
}
wobei du bei deiner Datenstruktur ev ein Problem hast, das flat-file-ding in
einen Array aufzusplitten
allerdings koennte das zB so gehen (wenn du nicht YAML oder XML oder so
verwenden willst:)
dbase:
Vorname: Benjamin
Nachname: Bluemchen
Strasse: Zuckerstueckchenstrasse 1
PLZ: 0101
Ort: Neustadt
###SEPERATOR###
Vorname: Benttina
Nachname: Bluemchen
Strasse: Zuckerstueckchenstrasse 1
PLZ: 0101
Ort: Neustadt
such.pl:
...
open DBASE, "<dbase";
my $zeilen=join '', <DBASE>;
my @datensaetze=split(/###SEPERATOR###/,$zeilen);
oder:
$/="###SEPERATOR###\n";
foreach (<DBASE>) {
push(@hits,$datum) if $datum=~/$such/;
}
$/ ist der INPUT_RECORD_SEPARATOR, siehe perldoc perlvar
> Danke fuer die Hilfe!
gerne, wenns denn hilft...
--
#!/usr/bin/perl http://domm.zsi.at
for(ref bless{},just'another'perl'hacker){s-:+-$"-g&&print$_.$/}
More information about the Vienna-pm
mailing list