Christian Leipnitz: automatischer Anhang beim Suchen

Hallo zusammen!

Ich möchte gern mit Hilfe von Perl in einer "per Hand" erstellten HTML-Datei nach bereits vergebenen eMail-Adressen suchen.

Das klappt soweit auch wunderbar.

Jetzt bin ich auf eine Sache gestossen, die mir ziemliches Kopfzerbrechen bereitet.

Kleines Beispiel dazu, dass die Sache vielleicht ganz gut verdeutlicht:

Eine bereits vorhandene eMail-Adresse lautet "frankfurt@irgendwas.de"

Jetzt sucht jemand nach der eMail-Adresse "frank@irgendwas.de", die noch nicht vergeben ist.

Aber:
Das Script zeigt an, dass diese Adresse schon vergeben ist, da "frank" (in "frankfurt") gefunden wurde.

Wie kann ich dem Script sagen, dass hinter dem Suchwort (also z. B. "frank") das "irgendwas.de" angehängt werden soll?

Also dass man nicht immer alles komplett ("frank@irgendwas.de") bei der Suche eingeben muss, sondern eben nur "frank".

Gibt es dafür eventuell einen bestimmten Befehl?

Beschäftige mich noch nicht so lange mit Perl, so dass ich leider nicht weiß, wonach ich im Archiv suchen könnte.

Hoffe, ich konnte mich verständlich ausdrücken.

Viele Grüße und Dank im Voraus,

  • Christian -
  1. Hallo zusammen!

    Ich möchte gern mit Hilfe von Perl in einer "per Hand" erstellten HTML-Datei nach bereits vergebenen eMail-Adressen suchen.
    Das klappt soweit auch wunderbar.
    Jetzt bin ich auf eine Sache gestossen, die mir ziemliches Kopfzerbrechen bereitet.
    Kleines Beispiel dazu, dass die Sache vielleicht ganz gut verdeutlicht:
    Eine bereits vorhandene eMail-Adresse lautet "frankfurt@irgendwas.de"
    Jetzt sucht jemand nach der eMail-Adresse "frank@irgendwas.de", die noch nicht vergeben ist.

    Aber:
    Das Script zeigt an, dass diese Adresse schon vergeben ist, da "frank" (in "frankfurt") gefunden wurde.
    Wie kann ich dem Script sagen, dass hinter dem Suchwort (also z. B. "frank") das "irgendwas.de" angehängt werden soll?
    Also dass man nicht immer alles komplett ("frank@irgendwas.de") bei der Suche eingeben muss, sondern eben nur "frank".
    Gibt es dafür eventuell einen bestimmten Befehl?
    Beschäftige mich noch nicht so lange mit Perl, so dass ich leider nicht weiß, wonach ich im Archiv suchen könnte.
    Hoffe, ich konnte mich verständlich ausdrücken.
    Viele Grüße und Dank im Voraus,

    • Christian -

    Hallo,

    wie suchst Du in Perl nach dem String?
    Mit Patternmatching solltest Du nicht mit
    if($variable ~= /frank/)

    sondern mit den Anfangs-und Endemarkierungen arbeiten:

    if($variable ~= /^frank$/)

    suchen, sonst passiert genau das, was Du nicht willst:

    hth.

    Gruß
    Martin

    1. Hallo,

      if ($variable ~= /^frank$/)
      ist keine gültige Perl-Anweisung.

      if ($variable =~ /^frank$/)
      findet aber nur das Wort frank in einer eigenen Zeile, richtig?

      Aber du könntest nach folgendem regulären Ausdruck suchen:
      if ($variable ~= /frank@/)

      Viele Grüße,
      Tausch.

      1. Aber du könntest nach folgendem regulären Ausdruck suchen:
        if ($variable ~= /frank@/)

        if ($variable =~ /frank@/)

        sorry.

  2. Wie kann ich dem Script sagen, dass hinter dem Suchwort (also z. B. "frank") das "irgendwas.de" angehängt werden soll?
    Also dass man nicht immer alles komplett ("frank@irgendwas.de") bei der Suche eingeben muss, sondern eben nur "frank".
    Gibt es dafür eventuell einen bestimmten Befehl?

    Hi,

    Du kannst den . Operator verwenden.
    z.B.:

    @namensliste = (frank, kurt, emil);
    $adr = "@irgendwas.de";
    foreach $name (@namensliste)
    {
         $emailadresse = $name.$adr;
         if ($emailadresse eq $pruefreferenz)
         {
              print $emailadresse." gibt es schon!\n";
         }
    }

    Gruß
                 Marcus

    1. Hallo!

      »»
      Du kannst den . Operator verwenden.
      z.B.:

      @namensliste = (frank, kurt, emil);
      $adr = "@irgendwas.de";
      foreach $name (@namensliste)
      {
           $emailadresse = $name.$adr;
           if ($emailadresse eq $pruefreferenz)
           {
                print $emailadresse." gibt es schon!\n";
           }
      }
      »»

      Erstmal vielen Dank.

      Also ich als Laie finde, dass Dein Beispiel mein Problem löst. :)

      Jetzt habe ich ein anderen Problem:
      An welcher Stelle setze ich denn den Code ein? Ich habe schon mehrere Varianten ausprobiert, klappen will es aber nicht. :(

      Ich mache es zwar ungern, da dagegen verständlicherweise oft protestiert wird, aber anders werde ich wohl nicht weiterkommen.

      Hier also doch mal der Code (sorry), in dem meiner Meinung nach die Suche definiert ist.

      Dazusagen möchte ich noch, dass das Script nicht von mir, sondern nur angepasst ist. Des weiteren werden mit Hilfe des Scriptes eigentlich normale HTML-Seiten nach Stichwörtern durchsucht.
      Also so ganz optimal ist das Script sicher nicht ...

      ----------------------------------------

      @keywords = split(/\s+/,$keyword);

      foreach $type (@dirs)
      {
      chomp($type);
      $dir = "$base_dir/$type";

      chdir($dir);
      opendir (DIR, $dir) &cgiError ("Opening $dir
      Failed:", "$!");
      @allfiles = readdir(DIR);
      $totalnum=@allfiles;
      closedir (DIR);

      for($i=1; $i<$totalnum; $i++)
        {
        if (-d $allfiles[$i])
         {
         if ($allfiles[$i] ne "." && $allfiles[$i]
         ne ".." && $type ne "" && $subdirs eq "yes")
          {
          push(@dirs,"$type$allfiles[$i]/");
          }
          }
         if (-f $allfiles[$i])
          {
          ($file,$ext) = split(/./, $allfiles[$i]);
          foreach $searchtype (@searchtypes)
           {
            if ($ext =~ /$searchtype/i)
             {
              open (SEARCH,"$allfiles[$i]") &cgiError ("Open $allfiles
              [$i] Failed:", "$!");
              @search = <SEARCH>;
              close(SEARCH);
              $temp_file = "$type$allfiles[$i]";
              foreach $text (@search)
               {
                chomp($text);
                $text =~ s/<([^>]\n)*>//g;
                $text =~ s/&([^;])*;//g;
                $text =~ s/<!--([^-->])*-->//g;
                if ($connector eq "or" && $case eq "insensitive")
                 {
                  foreach $word (@keywords)
                   {
                    if (!($text =~ /$word/i)) { $match = 0; }
                    else { $matches{$temp_file} = $text; last; }
                     }
                      }
            if ($connector eq "and" && $case eq "insensitive")
             {
             if (!($text =~ /$keyword/i)) { $match = 0; }
             else { $matches{$temp_file} = $text; last; }
             }
             if ($connector eq "or" && $case eq "sensitive")
             {
             foreach $word (@keywords)
             {
             if (!($text =~ /$word/)) { $match = 0; }
             else { $matches{$temp_file} = $text; last; }
             }
             }
             if ($connector eq "and" && $case eq "sensitive")
             {
             if (!($text =~ /$keyword/)) { $match = 0; }
             else { $matches{$temp_file} = $text; last; }
             }
            }
           }
          }
         }
        }
      }
      foreach $key (sort(keys %matches))
      {
      push(@matches,$key);
      push(@summary,$matches{$key});
      }

      ----------------------------------------

      Würde es reichen, nur bestimmte Stellen anzupassen?
      Oder muss ich evtl. alles rausschmeißen?

      Gruß und besten Dank,

      • Christian -
        PS: Man mag mir meine laienhaften Erklärungsversuche verzeihen. *g*