Jens Wollschläger: *.* bei Suche in Webseiten

Ich möchte in Perl eine Stichwortsuche für ein Projekt mit vielen Seiten programmieren. Die Routine soll alle Seiten zeilenweise nach dem Stichwort durchsuchen und einen Link auf dieselbe generieren, wenn es das Wort in der Seite findet. Gibt es eine Möglichkeit, zu definieren, dass er ALLE .htm Dateien im aktuellen Verzeichnis abarbeiten soll, ohne daß man alle spezifisch angeben muss? Wenn der Begriff gefunden wird, müsste der Pfad für den Link natürlich auch "gemerkt" werden.
Ok, danke.......Jens

  1. Ich möchte in Perl eine Stichwortsuche für ein Projekt mit vielen Seiten programmieren. Die Routine soll alle Seiten zeilenweise nach dem Stichwort durchsuchen und einen Link auf dieselbe generieren, wenn es das Wort in der Seite findet.

    Hallo,

    Das ist aber nicht dein ernst oder? Überleg mal für jeden suchbegriff muß er jede seite indexiern! Da geht dir der server in die Knie, mach es gleich richtig, programmier dir einen Indexer der alle wörter exkl. tags einliest (den brauchst bei deiner variante auch)schreib das zeug in eine DB mit einem zusäztlichen feld für die Url von wo er das wort indexiert hat fertig,

    wenn dann jemand such durchsucht er nur die DB und SQL dbs sind schnell, da freut sich dein Provider und dein Server dankt es dir mit noch ein paar jahren treuen diensten :-))

    lg
    Ludwig

    1. Jo, ich dachte mir schon, das könnte problematisch sein. Ne eigene kleine DB hab ich schonmal selbst gemacht, doch wie macht ne SQL Datenbank?

      wenn dann jemand such durchsucht er nur die DB und SQL dbs sind schnell, da freut sich dein Provider und dein Server dankt es dir mit noch ein paar jahren treuen diensten :-))

      lg
      Ludwig

      1. Jo, ich dachte mir schon, das könnte problematisch sein. Ne eigene kleine DB hab ich schonmal selbst gemacht, doch wie macht ne SQL Datenbank?

        Hallo,

        auch nicht anders :-)

        zb.

        CREATE TABLE aktuell (
           id int(5),
           name char(50) NOT NULL,
           logourl char(50) DEFAUlT '/images/logos/',
           coverurl char(50) DEFAULT '/images/covers/',
           ausgabe char(20),
           head1 char(50),
           head2 char(50),
           head3 char(50),
           subhead1 char(70),
           subhead2 char(70),
           subhead3 char(70),
        );

        und schon hast du eine tabelle mit 11 feldern :-) auf denen du nach herzenslust inserts und selects machen kannst :-)

        <www.rent-a-database.de> oder so ähnlich da gibts ne ziemlich gute deutsche doku dazu, also SQL ist echt nicht schwer, ich hatte von SQL (gar keine) und von PHP wenig ahnung, nach 4 wochen war http://www.jobforum.at (ging am 1.1.2000 on) du siehst es ist echt keine wirkliche herausforderung, das programmiern der suche wird da schon eher lustiger :-) der indexer selber denn packst eh in eine schleife der für die wörter die inserts in die DB macht

        lg
        Ludwig

  2. Die Routine soll alle Seiten zeilenweise nach dem Stichwort durchsuchen und einen Link auf dieselbe generieren, wenn es das Wort in der Seite findet.

    Du kannst natürlich eine solche Aktion machen (CPAN-Modul File::Find), aber wie Ludwig empfehle ich Dir, die Seiten statisch zu indexen.

    Das Hauptproblem ist dann, wie und wann dieser Index aktualisiert wird.
    In diesem Forum hier wird der Index für das Archiv-Suchskript inkrementell erweitert, wenn neu Einträge in das Archiv aufgenommen werden.

    Gibt es eine Möglichkeit, zu definieren, dass er ALLE .htm Dateien im aktuellen Verzeichnis abarbeiten soll, ohne daß man alle spezifisch angeben muss?

    Wenn Du es selbst programmieren willst:
    1. Verzeichnis mit opendir() öffnen,
    2. Schleife über alle Einträge,
       pro Treffer: if ($name =~ /-htm$/)
    Achtung: Rekursiver Aufruf dieser Funktion für jedes gefundene Unterverzeichnis!

    Solche Ansätze sind im Archiv schon ein paarmal beschrieben worden.

    Wenn der Begriff gefunden wird, müsste der Pfad für den Link natürlich auch "gemerkt" werden.

    Außerdem brauchst Du als globale Variablen das Wurzelverzeichnis und den zugehörigen Wurzel-URL; einen String aus den zwischendurch gefundenen Unterverzeichnissen reichst Du durch die Rekursionsstufen weiter. Daraus kannst Du bei jedem "Blatt" des "Baums" den vollständigen URL und den Pfadnamen zusammenbasteln.

    1. hi!

      Gibt es eine Möglichkeit, zu definieren, dass er ALLE .htm Dateien im aktuellen
      Verzeichnis abarbeiten soll, ohne daß man alle spezifisch angeben muss?
      Wenn Du es selbst programmieren willst:

      1. Verzeichnis mit opendir() öffnen,
      2. Schleife über alle Einträge,
           pro Treffer: if ($name =~ /-htm$/)

      for (<*.htm>)
      {
        &do_something($_);
      }

      bye, Frank!