Torwächter: Suchbegriffe bei + teilen und dann suchen

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

  1. 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

    1. 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

      1. 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

        1. 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

          1. 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