MeisterB Geschrieben 20. April 2005 Geschrieben 20. April 2005 Hallo, ich habe in einem Baum mehrere Dateipfade gespeichert. Dem Benutzer soll nun die Möglichkeit gegeben werden den Baum nach bestimmten Pfaden zu durchsuchen. Für vollständige Pfade (z.B. MeineDaten\Programme\Explorer) und für die Suche nach nur einem Eintrag per WildCard(z.B. Pro*me) habe ich diese Suche schon implementiert. Nur die Verbindung beider Suchmöglichkeiten (z.B. M*\*o) bereitet mir Probleme. Habt ihr vielleicht ne Idee wie ich diese letzte Suchmöglichkeit umsetzen könnte? Zitieren
sissy66 Geschrieben 20. April 2005 Geschrieben 20. April 2005 ... waere nett. W-Fragen! Liebe Gruesse, sissy66. Zitieren
kingofbrain Geschrieben 20. April 2005 Geschrieben 20. April 2005 Servus, das kann man ohne nähere Infos nicht sagen. Es kommt darauf an, wie Du die Informationen über die Einträge im Baum speicherst. Wenn Du den kompletten Pfad hast, dann kannst Du das ja über eine Art Regular Expression lösen (entweder selbst codieren, also Parser und Interpreter), oder von der verwendeten Sprache schon unterstützt. Wenn Du nur vorgesehen hast, die jeweilige Dateinameninformation ohne Pfad zu verwenden, geht es nicht. Peter Zitieren
sissy66 Geschrieben 21. April 2005 Geschrieben 21. April 2005 Willst Du wirklich wildcards implementieren? Schreibst Du gerade Deine eigene Shell? Meistens gibts doch schon was vorgefertigtes fuer java, cpp, was man einfach verwenden kann (google, sourceforge mit diesen Begriffen fuettern und dann mal ne Weile suchen), wenn Du wildcards nur benutzen willst. Und die fette Theorie wie man nicht nur 1 Zeichen expandiert kenn ich nicht. Hab die Vorlesung etc. zur Mustererkennung oder wie man eine kleine eigene shell schreibt nicht besucht, wo die das erklaeren, wie man das moeglichst effektiv macht. Ansonsten wuerd ich einfach eine rekursive Funktion schreiben, damit es irgendwie erst mal funktioniert. Aber die ist natuerlich superlangsam. Die Funktion/Methode ( "suche nach einem uebereinstimmenden Zeichen" , was Du ja schon implementiert hast) fuer jedes weitere Zeichen anwenden (aehnlich wie eine Schleife mit Abbruchbedingung). ... func{ // Suche nach Zeichen if(){ // Abbruchbedingung, vielleicht ueber Eingabe der max. Zeichen fuer die wildcard func{}; // rekursiver Aufruf => erneute Suche starten } } ... Aber vergiss nicht ne gute Abbruchbedingung zu definieren! ... vielleicht dass Du eine Grenze festlegst, wie gross das wildcard maximal sein kann oder dass Du bis EOF suchst, wenn Du weisst, dass Du die wildcard auf eine Datei anwendest ... wie auch immer, kenn ja Deinen Code nicht und wie stark das alles optimiert sein soll. Liebe Gruesse, sissy66. Zitieren
SNOWMAN Geschrieben 21. April 2005 Geschrieben 21. April 2005 nunja, die infos sind zwar mager aber ich geb dir mal n paar denkansätze: du durchsuchst den suchstring nach "/" wenn welche drin sind dann wird der suchstring gesplitet dann haben wir suchstring1 und suchstring2 danach fängst du mit der suche an nach suchstring1 an sobald ein treffer gefunden wurde gehst du in diesen pfad rein und suchst nach suchstring2 ohne rekursion aber, bzw. mit wenn du das willst. das ganze ist auch auf wilcards über 3,4,5,...,100 ordner zu machen, is halt etwas aufwendiger Zitieren
sissy66 Geschrieben 21. April 2005 Geschrieben 21. April 2005 nunja, die infos sind zwar mager aber ich geb dir mal n paar denkansätze: du durchsuchst den suchstring nach "/" wenn welche drin sind dann wird der suchstring gesplitet dann haben wir suchstring1 und suchstring2 danach fängst du mit der suche an nach suchstring1 an sobald ein treffer gefunden wurde gehst du in diesen pfad rein und suchst nach suchstring2 ohne rekursion aber, bzw. mit wenn du das willst. das ganze ist auch auf wilcards über 3,4,5,...,100 ordner zu machen, is halt etwas aufwendiger Das erste was Du erzaehlst, hat er doch schon implementiert! willst Du es plattformabhaengig machen (!- mit"/" beschraenkst Du Dich schon drauf -!) kannst Du auch gleich Deine suchstrings mit den unixkommandos "basename" oder "dirname" rausfiltern ----- bist Du Dir sicher, dass diese chinesischen Zeichen auch das bedeuten, was Du willst? (es gibt immer mehrere Bedeutungen fuer 1 Zeichen, falls Du Dich erinnerst) Zitieren
SNOWMAN Geschrieben 21. April 2005 Geschrieben 21. April 2005 Das erste was Du erzaehlst, hat er doch schon implementiert! ----- bist Du Dir sicher, dass diese chinesischen Zeichen auch das bedeuten, was Du willst? (es gibt immer mehrere Bedeutungen fuer 1 Zeichen, falls Du Dich erinnerst) Dann hab ich da was falsch verstanden :/ Google denkt das es so richtig ist Zitieren
MeisterB Geschrieben 22. April 2005 Autor Geschrieben 22. April 2005 Danke für die Antworten und Entschuldigung für die wenigen Infos Für die Wildcards habe ich eine Funktion die 2 Zeichenfolgen (in der 2. können Wildcards sein) übergeben bekommt und mir dann zurück gibt ob die 2. in der 1. Folge vorhanden ist. Es sind nur "*"-alle Zeichen und "?"-nur ein Zeichen als Wildcards verwendbar. Die Wildcardsuche nach nur einem Eintrag ist somit auch nur ein Vergleich dessen Beschriftung mit dem Suchstring über die Funktion. Für den normalen Pfad gehe ich bereits den von SNOWMAN beschriebenen Weg. Zum Glück hat sich die Anforderung an die Suche geändert, die Wildcards sollen nur noch für ein Item gelten -> M*\*o entspricht nun nur noch 2 Items und nicht mehr dem ganzen Pfad Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.