Thema: Suchmaschine (nur) für eigenen Host

Hallo zusammen,<P>Wie sieht denn ein sinnvoller Algorithmus zum durchsuchen alles html Dokumente nach bestimmten Suchworten auf dem eigenen Host aus?<P>Ich möchte so was mit Perl programmieren, weiß aber nicht so recht wie ich drangehen soll.<P>Bis jetzt komm ich nur zu so was:<P>Entweder so:<P>Ich öffne das das roots Verzeichnis speichere alle Verzeichnise, falls welche Vorhanden, in einem Array.<P>Ich durchsuche alle Dateien.<P>Ich öffne das erste Verzeichnis aus dem Array und speicher wieder alle Unterverzeichnisse, falls vorhanden, in einem Array,<P>die Dateien durchsuch ich wieder.<P>usw. wenn keine Verzeichnisse mehr vorhanden sind geh ich einen Hoch und mach bei dem nächsten Verzeichnis weiter.<P>...<P>Hört sich, find ich, erst mal ganz logisch an, wenn ich das aber mal so Struktogramm mäßig umsetzen möchte, weiß ich nicht wie ich das sinnvoll in ne Schleife oder so packen kann, so dass ich nicht mit einer vordefinierten tiefe der Verzeichnisse arbeiten muß. Oder macht man so was mit einer rekursiven Funktion? Wenn ja, wie?  [img]images/icons/smile.gif" border="0[/img]<P>Der zweite Ansatz:<P>Ich öffne das Roots Verzeichnis,<P>Ich durchsuche die Dateien.<P>Ich öffne das erste Verzeichnis und merk mir den Verzeichnisnamen. <P>ich durchsuch wieder die Dateien und öffne das erste Verzeichnis und merk mir den Verzeichnisnamen.<P>usw. so lange bis kein Unterverzeichnis mehr da <P>Dann geh ich ein Verzeichnis nach oben und öffne das ersten nächste Verzeichnis welches nicht namentlich in meiner merkliste erwähnt ist.<P>so müßte das ja theoretisch auch klappen.<P>praktisch aber die geleichen Problem und was mach ich wenn 2 Verzeichnisse den gleichen Namen haben?<P>wär für Hilfe sehr dankbar,<P>thx, sel.

2

Re: Suchmaschine (nur) für eigenen Host

servus,<P>du solltest in deiner merkliste nicht nur den verzeichnisnamen sondern den ganzen pfad speichern. die sind ja einmalig  [img]images/icons/wink.gif" border="0[/img]<P>hier ein link zu einem search script<P><A HREF="http://worldwidemart.com/scripts/search.shtml" TARGET=_blank>[Matt Wrights - Simple Search]</A><P><A HREF="http://worldwidemart.com/scripts/cgi-bin/download.cgi?s=search&" TARGET=_blank>[Matt Wrights - Simple Search - Source Code]</A><P><BR>ist halt gleich ne kommplett lösung.<BR>im sub get_files() liest er alle filepfade in ein Array.<P>im sub search() dursucht er dann die files<P>schau dir das mal an<P>vielleicht kannst du da ja durchsteigen<P>gruß<BR>pfuschi<p>[ 09.06.2001: Beitrag editiert von: pfuschi ]

Source Code Editor in Perl
http://proton-ce.sf.net

3

Re: Suchmaschine (nur) für eigenen Host

noch ne frage...<P>machst du deine strucktos am PC mit software oder handschriftlich auf good old paper?<P>kennt jemand da gute freeware?<BR>ich benutz momentan easy case <P>gruß<BR>pfuschi

Source Code Editor in Perl
http://proton-ce.sf.net

4

Re: Suchmaschine (nur) für eigenen Host

<BLOCKQUOTE><font size="1" face="Verdana, Helvetica, sans-serif">Zitat:</font><HR><BR>machst du deine strucktos am PC mit software oder handschriftlich auf good old paper?<P>kennt jemand da gute freeware?<BR>ich benutz momentan easy case <BR>[/QB]<HR></BLOCKQUOTE><P>WinGESy4 ist auch ganz gut. ( glaub ich zumindest, ) kann man in der DemoVersion allerdings nur 5!!! Elemente hintereinander fügen,<P>kriegt man auch leider nix war*zmäßiges.<P>ich kritzel die Struktogramme mit der Hand und wenns schön werden soll mach ich sie in Word. Wenn man mit PAPs arbeitet ist Word auch ziemlich konfortabel.<P>Zum Script:<P>nette Seite hast du gelinkt,<P>leider hilft mir das Script überhauptnicht weiter, da der Author das Problem ziemlich unelegant umgangen hat. <P>Bevor man das Script installiert muß man es so konfigurieren, das man alle Verzeichnisse die durchsucht werden sollen in ein Array schreibt. Das Script orientiert sich dann an dem Array und nicht an den tatsächlich vorhandenen Verzeichnissen.<P>Perl bietet einem ja alle Möglichkeiten die man braucht um so was automatisch ablaufen zu lassen. <P>Ich weiß halt bloß nicht wie ich drann gehen soll.<P>Aber eigentlich kanns ja wirklich nicht schwierig sein.<P>Ne Schleife die sich so lange durch die Verzeichnisse forstet bis alle Dateien eingelesen sind...<P>...oder so...<P>hmm  [img]images/icons/confused.gif" border="0[/img] <P>cu, sel.

5

Re: Suchmaschine (nur) für eigenen Host

ich glaub ich habs.<P>Alles in einer Schleife:<P>Alle Verzeichnisse (zuerst im Root) einlesen und in einem Hash als Schlüssel mit einem nicht wahren Wert als Value speichern.<P>Danach den Wert bei Schlüßel Rootsverzeichniss auf true setzen.<P>Schleifenbedingung ist solange irgendwo im Hash noch unwahre Werte sind.<P>Die Schleife muß ja um die Werte die mit den Pfad  [img]images/icons/wink.gif" border="0[/img] Angaben der Verz. verknüpft sind immer die Verz. einlesen. Dabei tauchen solange neue Verz. auf bis sie irgendwann alle alle sind...<P>ma gucken...<P>cu, cel.

Re: Suchmaschine (nur) für eigenen Host

Hash?<BR>Wie wärs damit: im Root alle Dateien checken, dann in den jeweiligen Unterverzeichnissen...   [img]images/icons/cool.gif" border="0[/img]

mfG whitehouse

7

Re: Suchmaschine (nur) für eigenen Host

servus,<P>unter <A HREF="http://www.devshare.de/cgi-bin/ubb/ultimatebb.cgi?ubb=get_topic" TARGET=_blank>[Thread anschauen]</A> gehts grad auch um ne suchmaschine <P>wenn du in dem script von matt folgende einstellung machst müsste es deine zwecke erfüllen<BR><BLOCKQUOTE><font size="1" face="Verdana, Helvetica, sans-serif">Code:</font><HR><pre><BR>$basedir = '/';<BR>$baseurl = 'http://127.0.0.1/';<BR>@files = ('*.html');<BR></pre><HR></BLOCKQUOTE><P>ich frag mich was da unschön ist...<BR>kannst du mir noch mal genauer erklären was id ran dem script nicht gefällt? vielleicht kann man das ja umgehen<P>noch was... nicht das ich das falsch vertehe<BR>willst du das script von der commandozeile aus starten oder über nen web server?<P>im übrigen wirds bald OT sollte man das nicht nach Perl verschieben?<P>gruß<BR>pfuschi<p>[ 09.06.2001: Beitrag editiert von: pfuschi ]

Source Code Editor in Perl
http://proton-ce.sf.net

8

Re: Suchmaschine (nur) für eigenen Host

Hallo,<P>also mein damaliger Mentor sagte immer:<BR>"Zu jedem Problem gibt es unendlich viele Lösungen."<P>Das mit dem Hash ist vielleicht auch 'ne Lösung, hätte aber was von der Geschichte mit den Spatzen und Kanonen...<P>So plump es auch klingt aber prinzipiell hat whiteheart Recht.<BR>Ich gib' dir mal ein bißchen Pseudo-Code, hat ein bißchen was von deinem 2. Lösungsansatz im ersten Posting.<P>funktion rekursivSuche(akt_Ordner)<BR>{<BR>--speichere alle Elemente des akt_Ordner in einem Vektor<BR>--Schleife solange Vektor nicht leer<BR>--{<BR>----nehme Element aus Vektor<BR>----wenn Element Ordner<BR>------rekursivSuche(Ordner)<BR>----andernfalls wenn Datei<BR>------durchsuche Datei nach Suchbegriffen<BR>--}        <BR>}<P>Sieht zwar verdammt wenig aus, mehr ist aber nicht nötig.<BR>Für die Suche selber brauchst du dir nix zu merken,<BR>das erledigt die Rekursion.<BR> <BLOCKQUOTE><font size="1" face="Verdana, Helvetica, sans-serif">Zitat:</font><HR> von Bjarne Stroustrup (Erfinder von C++)<BR>To iterate is human, to recurse is divine.<BR><HR></BLOCKQUOTE><BR>Die Eindeutigkeit erreichst du wie pfuschi schon<BR>sagte über vollständige Pfadangaben.<P>bis dänn, odoggy

Member of Vatos Locos

9

Re: Suchmaschine (nur) für eigenen Host

<BLOCKQUOTE><font size="1" face="Verdana, Helvetica, sans-serif">Code:</font><HR><pre><BR><B>@files = ('*.shtml','demos/links/*.html','demos/guest/*.html');</B><BR></pre><HR></BLOCKQUOTE><P>Das ist nicht so schön. Man ist wie gesagt gewzungen die Ordner die man durchsucht haben möchte alle anzugeben.<P>Ich teste es erst mal von Kommandozeile, na ja, prompt und denke das es dann auf dem Server funzen wird, da ja mit absoluten Pfaden gearbeitet wird.<P>Verschieben brauch nicht sein, ich bin fertig. Wenns interessiert kann ich das Script ja posten, dann natürlich bei Perl. Mir gings aber wirklich nur um den Algorithmus. Ich habs jetzt mit Schleifen gelöst, so wie oben beschrieben. <P>Das Produkt des Script ist bis zur Zeit eine Liste aller html Dateien mit absoluten Pfad angaben  auf dem Server, (z.Zt noch Lokal) Die zu durchsuchen kann ja jetzt auch nicht mehr das Prob sein...<P>Perl ist ja echt so ne wahnsinns Sprache...<P>auch thx to odoggy,<P>cu, sel.<P>[ 09.06.2001: Beitrag editiert von: SeleCToR ]<p>[ 09.06.2001: Beitrag editiert von: SeleCToR ]

Re: Suchmaschine (nur) für eigenen Host

Hehe, mit VB hat man das FileSystemObject-Objekt. Da kann man das direkter realisieren (hab so auch n Ordner Baum gemacht).

mfG whitehouse

11

Re: Suchmaschine (nur) für eigenen Host

und mit Perl könnte man sich das Leben noch mit Modulen wie:<P>DirHandle<BR>File::CheckTree<BR>File::Find<P>etc einfacher machen.<P>Ich glaub nicht das wenn man die Macht der beiden Sprachen vergleicht VB auch nur ansatzweise ne Schnitte hat.<P>Allein die History und Motivation zur Entwicklung der beiden Sprachen. Ich ärger mich auch total das ich immer noch diese blöden MS BS auf meiner Kiste hab.<P>cu, sel.

Re: Suchmaschine (nur) für eigenen Host

VB ist halt bei String-Parsing net so gut (RegExps). Aber das FileSystemObject - das ist einfach genial. Mein FolderBrowser macht übrigens das folgende: zeogt erstmal alle Laufwerke, verfügbare mit einem Sharing-Zeichen; sobald jemand was expandiert, geht das hoch und das halt so weiter. Schaut sich auch n Icon für alles aus und all das in schlappen 2-3 Bildschirmseiten (Event Handling und Kapselung eingeschlossen). Wenn mans vernünftig macht, gehts auch auf Perl, aber ohne UI (vernünftig - mit dem gleichen Aufwand). Sag mal was, was du denkst, was VB wahrsch. nich kann und ich schau... <BR>Will aber keinen "Streit" anfangen.

mfG whitehouse

Re: Suchmaschine (nur) für eigenen Host

Nachtrag zu meinem Browse... es zeigt unten auch noch Informationen zum gewählten Drive/Ordner (freier/gebr. Speicherplatz, Bezeichnung, Dateisystem, ... (?weiß nimmer genau). Eigentlich wollt ich ja auch noch ein sonst. FileBrowse machn, aber da machen meine Sortierkenntn. nich mit.

mfG whitehouse

14

Re: Suchmaschine (nur) für eigenen Host

<BLOCKQUOTE><font size="1" face="Verdana, Helvetica, sans-serif">Zitat:</font><HR>Sag mal was, was du denkst, was VB wahrsch. nich kann und ich schau...<HR></BLOCKQUOTE><P>also... VB wurde auf MS Systemen entwickelt, Perl auf Unix. <BR>Was ganz nützliches insbesondere bei MS Produkten: Lese eine Zeile aus dem Kernel deines BS aus. (Falls es mal wieder buggy ist) patche die Zeile, und schreibe sie in den Kernel zurück....<P>Ums vorweg zu nehmen: Ich könnts garantiert nich bei nem Linux/Unix System, vor allem da ich nur mit diesem MS Müll arbeite.  [img]images/icons/frown.gif" border="0[/img] <BR>...aber es geht... <BR> [img]images/icons/smile.gif" border="0[/img]<BR> <BLOCKQUOTE><font size="1" face="Verdana, Helvetica, sans-serif">Zitat:</font><HR><BR>Will aber keinen "Streit" anfangen.<HR></BLOCKQUOTE><BR>Wer will das schon?<BR> [img]images/icons/smile.gif" border="0[/img]<P>cu, sel.

Re: Suchmaschine (nur) für eigenen Host

Nun, man kann den kernel wohl nich so leicht verändern wenn er verwendet wird, oder? Als Datei lässt sich natürlich das machen (Zeile einlesen, ändern, auslesen), was ist aber wenn man nen Fehler macht [img]images/icons/grin.gif" border="0[/img] [img]images/icons/tongue.gif" border="0[/img]?<BR>Mit dem Streit sin wer uns ja einich.

mfG whitehouse

16

Re: Suchmaschine (nur) für eigenen Host

moin,<BR>meine ultimative meinung zu dem thema:<BR><BLOCKQUOTE><font size="1" face="Verdana, Helvetica, sans-serif">Code:</font><HR><pre><BR>my $basedir = "basisverzeichnis :-)";<BR>my $pattern = "*.html";<BR><BR>getfiles($basedir, $pattern);<BR><BR>sub getfilenames() {<BR>  ($dir, $pattern) = $_;<BR>  @files = glob($dir."/".$pattern);<BR>  foreach (@files) {<BR>    if (! -e $dir."/".$_) {<BR>      push (@result, $dir."/".$_);<BR>    } else {<BR>      push(@result, getfilenames($dir."/".$_, $pattern);<BR>    }<BR>  }<BR>  return @result;<BR>}<BR></pre><HR></BLOCKQUOTE><BR>sollte eigentlich funktionieren. falls ich nicht wieder irgendwo einen fehler gemacht habe. aber das debuggen könnt ihr ja machen ;-))<BR><BR>cu s!r tru$t<p>[ 12.06.2001: Beitrag editiert von: sir tru$t ]

Re: Suchmaschine (nur) für eigenen Host

hmm, passt "basedir :-)" in die namenskonvention  [img]images/icons/wink.gif" border="0[/img]. hehe, ich find perl kryptisch.<p>[ 13.06.2001: Beitrag editiert von: whiteheart ]

mfG whitehouse

18

Re: Suchmaschine (nur) für eigenen Host

perl ist keine geschriebene sprache, sondern eine gemalte. höre auf perl zu lesen, beginne so zu denken ;-)))<P>cu s!r tru$t

19

Re: Suchmaschine (nur) für eigenen Host

<BLOCKQUOTE><font size="1" face="Verdana, Helvetica, sans-serif">Zitat:</font><HR>Original erstellt von sir tru$t:<P><BLOCKQUOTE><font size="1" face="Verdana, Helvetica, sans-serif">Code:</font><HR><pre><BR>my $basedir = "basisverzeichnis :-)";<BR>my $pattern = "*.html";<P>getfiles($basedir, $pattern);<P>sub getfilenames() {<BR>  ($dir, $pattern) = $_;<BR>  @files = glob($dir."/".$pattern);<BR>  foreach (@files) {<BR>    if (! -e $dir."/".$_) {<BR>      push (@result, $dir."/".$_);<BR>    } else {<BR>      push(@result, getfilenames($dir."/".$_, $pattern);<BR>    }<BR>  }<BR>  return @result;<BR>}<BR></pre><HR></BLOCKQUOTE><BR>sollte eigentlich funktionieren. falls ich nicht wieder irgendwo einen fehler gemacht habe. aber das debuggen könnt ihr ja machen ;-))<BR><HR></BLOCKQUOTE><P><BR>Die Transformation von odoggy's Algo.<P>Habs zwar anders gelöst, aber werds auf jeden Fall mal Ausprobieren...<P>thx, sel.

20

Re: Suchmaschine (nur) für eigenen Host

thx to all!<P>hat hervorragend mit der rekursiven Funktion geklappt.<P>Ich fands erst mal vom verständnis her nicht so einfach. ich fand den Gedanken ziemlich komisch, das sich da was total verschachtelt. Aber ist ja eher so, das die Funktion beim neuen Aufruf von sich selbst verlassen wird.<P>Der eigentliche Programmkern ist 12!! Zeilen lang. <P>nochmal danke,<P>cu, sel.