Suchbegriffe bei + teilen und dann suchen
Torwächter
- perl
Hallo zusammen,
nun hab ich mal wieder eine Frage :)
Ich programmier eine Perlsuchmachiene, hab schon alles fertig bis auf ein kleines Tool, man soll z.B. nach "Spiele+Unreal" suchen können (beachte das +) nun möchte ich, dass erst nach Spiele gesucht wird:
------------------------- (nicht wirklich der Code)
open Seek.log
read (@Eintrage)
close
foreach $line(@Eintrage){
(name,keyA,keyB,keyC) = (split |)
if (keyA =~ /$Suchfeld/)
{print "name";}
elsif (keyB =~ /$Suchfeld/)
{print "name";}
elsif (keyC =~ /$Suchfeld/)
{print "name";}
------------------------- (nicht wirklich der Code)
Wie kann ich aber o.g. Problem lösen ?
Vielen Dank für eure Hilfe.
Mit freundlichen Grüßen
Torwächter
Hoi,
Ich programmier eine Perlsuchmachiene, hab schon alles fertig bis
auf ein kleines Tool, man soll z.B. nach "Spiele+Unreal" suchen
können (beachte das +) nun möchte ich, dass erst nach Spiele
gesucht wird:
[... sinnloser Codefetzen ...]
Wie kann ich aber o.g. Problem lösen ?
Was genau willst du jetzt eigentlich? Der oben genannte Codefetzen hat
nichts mit deiner Beschreibung zu tun. Wenn du nach mehreren Begriffen
suchen moechtest, dann kannst du das z. B. ueber:
open DAT,"<entries.dat" or die $!;
my @entries = <DAT>;
close DAT;
my @terms = split /+/, $searchstring;
foreach my $term (@terms) {
$term = quotemeta $term;
@entries = grep /$term/, @entries;
}
Ist zwar kein sehr guter Algorithmus, aber es geht. Wenn entweder
der eine Begriff, oder der andere enthalten sein soll, kannst
du das z. B. so machen:
my $searchterm = join '|' => map { quotemeta $_ } split /+/,$searchterm;
open DAT,"<entries.dat" or die $!;
my @entries = grep /$searchterm/, <DAT>;
close DAT;
Du siehst also, du solltest dich genauer ausdruecken.
Gruesse,
CK
Hallo,
so sinnlos war meine Codefetzen auch nicht (war mein Suchalgorithmus), habe eben nur die Funktionsweise niedergeschrieben und nicht das Script, da ich den Code nicht zur Hand habe.
Also hier nocheinmal genauer :
--------------------------------------
...
$Suchfeld = $FORM{'Suchbegriff'};
open DATEI,"Seek.log";
my @Alles = <DATEI>;
close DATEI;
foreach $zeile(@Alles)
{
($name,$keyA,$keyB,$keyC) = split(/|/,$Satz);
if ($keyA =~ /$Suchfeld/)
{print "$name";}
elsif ($keyB =~ /$Suchfeld/)
{print "$name";}
elsif ($keyC =~ /$Suchfeld/)
{print "$name";}
}
...
-------------------------------------
Mit freundlichen Grüßen
Torwächter
Hoi,
Also hier nocheinmal genauer :
[...]
Ich hatte den Code schon verstanden. Er stand nur in keiner Relation
zu deinen Saetzen darueber. *Was* willst du ueberhaupt?
Gruesse,
CK
Hallo Christian,
ich möchte über ein Formular ein Wort (oder h i e r mehrere) in einer .log datei suchen. Das funzt soweit auch mit meinem Script (ist zwar einfach, aber funzt). Nun möchte ich aber nach 2 (oder mehr) Worten gleichzeitig suchen können, d.h. wenn ich nach "Karten+UnrealT" suche sollen die Keywords nach Karten u n d nach UnrealT durchsucht werden.
Wenn also in einer Zeile steht:
#Name|keyA|keyB|keyC#
DieUTMaps|UnrealT|Maps|Karten
Dann soll sie angezeigt werden wenn nach Karten+UnrealT gesucht wird, da beide Wörter enthalten sind.
Viele Grüße
Torwächter
Hoi,
ich möchte über ein Formular ein Wort (oder h i e r mehrere) in
einer .log datei suchen. Das funzt soweit auch mit meinem
Script (ist zwar einfach, aber funzt). Nun möchte ich aber
nach 2 (oder mehr) Worten gleichzeitig suchen können, d.h. wenn
ich nach "Karten+UnrealT" suche sollen die Keywords nach
Karten u n d nach UnrealT durchsucht werden.
Die Loesung dazu habe ich dir doch schon in meinem ersten Beispiel
gepostet:
open DAT,"<entries.dat" or die $!;
my @entries = <DAT>;
close DAT;
my @terms = split /+/, $searchstring;
foreach my $term (@terms) {
$term = quotemeta $term;
@entries = grep /$term/, @entries;
}
Hierbei wird die Liste der Eintraege immer kuerzer durch das
grep.
Gruesse,
CK