Hallo K@rl
Kennt da jemand eine gute Lösung (Produkt, Shareware, Freeware oder gnu wird auch gerne genommen)?
Wenn du gerne etwas bastelst, dann kannst du dir ja das Folgende mal als Ausgangspunkt nehmen. Ist ein Perlscript, mit dem ich Javascript-basierte Suchen anfertigen kann. Das Script erzeugt die komplette JS-Datei. In der HTML-Datei mit dem Suchformular muss die dann mit <script src...> eingebunden werden. Das Formular muss <form name="Such"> haben, das Eingabefeld fuer den Suchbegriff <input name="Ausdruck"> und der Button zum Starten der Suche <input type="button" ... onClick="Search()">. Wichtig ist bei der hier verwendeten Loesung allerdings, dass die Projektdateien *.htm einem einheitlichen Namensschema folgen, und dass die Inhalte von Tags, die indexiert werden sollen, immer in einer Zeile stehen innerhalb der HTML-Dateien. Aber mit etwas Programmiererei kannst du das alles natuerlich auch anders machen.
Das Script ist kein CGI-Script, sondern laeuft ganz normal auf Betriebssystemebene, um seinen Dienst zu tun.
viel Spass ;-)
#! perl
$Dir = "/der/pfad/zum/projekt/";
$Mask = "t*.htm"; /* Dateien t*.htm */
$Outputfile = "/der/pfad/zum/projekt/srch.js";
@tags = ("<h1>","<h2>","<p>","<li>","<span>"); /* deren Inhalt wird indexiert */
@endtags = ("</h1>","</h2>","</p>","</li>","</span>");
$HTML_before = "<html><head><title>Suchergebnisse</title><link rel="stylesheet" href="style.css" type="text/css"></head><body bgcolor="#F4F4F4" text="#000000" link="#003366" vlink="#002244" alink="#000000"><h1>Suchergebnisse</h1><p><b>'+ j +' Treffer in '+ k +' Themen</b></p><p>";
$HTML_after = "</p><br> <hr noshade size="1"><span class="footer"><a href="index.htm" target="_parent">Inhalt</a></span></body></html>";
$pagegif = "<img src="xpage.gif" width="16" height="16" border="0" alt="Thema">";
@Stoplist = ("[Dd]..","[Dd]ies","[Dd]ies.","[Dd]ies..","[Ee]in","[Ee]in.","[Ee]in..","[Kk]ein","[Kk]ein.","[Kk]ein..","nicht","und","aber","[Ss]ie","sein","ist","sind","werden","[Wwenn]","[Nn]ur","[Ff]ür","[ia][nm]","muß","bei.","[Vv]o[nm]","[Ee][rs]","nach","kann","[Aa]ndere","auch","wird","werden","mit","ohne","als","immer");
opendir VERZEICHNIS, $Dir;
@entries = readdir(VERZEICHNIS);
closedir VERZEICHNIS;
foreach $entry (@entries) {
if($entry =~ /$Mask/) {
push(@files,$entry);
}
}
open(OUT,">$Outputfile");
$i = 0;
$f = 1;
$fx = 0;
$x = @files;
$ = 1;
print OUT "var db = new Array(";
foreach $file (@files) {
if($i == 0) {
print OUT "\n"file:$file"";
print "verarbeite $file ($f von $x): ";
$i++;
}
else {
print OUT ",\n"file:$file"";
print "verarbeite $file ($f von $x): ";
$i++;
}
$f++;
@lines = "";
$pathfile = $Dir.$file;
open(FILE,"<$pathfile") die "\n$pathfile nicht gefunden\n";
@lines = <FILE>;
close(FILE);
@linewords = "";
$fi = 0;
foreach $line (@lines) {
$openflag = 0;
if($line =~ /<title>(.*)</title>/) {
print OUT ",\n"title:$1"";
}
$indexdata = "";
for($i = 0; $i < @tags; $i++) {
if($line =~ /$tags$i$endtags[$i]/) {
$indexdata = $1;
}
}
@linewords = split(/ . , ; /,$indexdata);
foreach $word (@linewords) {
$word =~ s/.*@.*//gi;
$word =~ s/.*.htm//gi;
$word =~ s/<.*//gi;
$word =~ s/.*>//gi;
$word =~ s/[\s(){}[]./":\]//gi;
foreach $Stopexpr (@Stoplist) {
$word =~ s/\b$Stopexpr\b//gi;
}
if($word ne "") {
if($i == 0) {
print OUT "\n"$word"";
}
else {
print OUT ",\n"$word"";
}
$i++;
$fi++;
}
}
}
print "$fi\n";
$fx = $fx + $fi;
$i = 0;
}
print "\n============================================\n$fx Array-Eintraege angelegt\n\n";
print OUT ");\n\n";
print OUT "function search() {\n";
print OUT "j = 0; f = ""; t = "";\n";
print OUT "var ff = new Array();\n";
print OUT "var ft = new Array();\n";
print OUT "var x = document.Such.Ausdruck.value;\n";
print OUT "for(i=0;i<db.length;i++) {\n";
print OUT " if(db[i].indexOf("file:") != -1)\n";
print OUT " { f = db[i].substring(5,db[i].length); }\n";
print OUT " else if(db[i].indexOf("title:") != -1)\n";
print OUT " { t = db[i].substring(6,db[i].length); }\n";
print OUT " else if(db[i].indexOf(x) != -1)\n";
print OUT " { ff[j] = f; ft[j] = t; j++; }\n";
print OUT "}\n";
print OUT "var resultlinks = "";\n";
print OUT "k = 0;\n";
print OUT "m = 1;\n";
print OUT "for(i=0; i<j; i++) { \n";
print OUT " if(ff[i+1] == ff[i]) m++;\n";
print OUT " else { resultlinks+= '$pagegif <a href="'+ff[i]+'">'+ft[i]+'</a> (<b>'+m+'</b> Treffer)<br>'; k++; m=1; }\n";
print OUT "}\n";
$HTML_before =~ s/"/\"/g;
print OUT "var resulthead = '$HTML_before';\n";
print OUT "document.clear();\n";
print OUT "document.open();\n";
print OUT "document.write(resulthead);\n";
print OUT "document.write(resultlinks);\n";
print OUT "document.write('";
print OUT "$HTML_after');\n";
print OUT "document.close();\n";
print OUT "}\n";
close(OUT);
viele Gruesse
Stefan Muenz