Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

WildCard-Suche in einem Baum

Empfohlene Antworten

Veröffentlicht

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?

... waere nett.

W-Fragen!

Liebe Gruesse,

sissy66.

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

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.

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

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)

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 ;)

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 :)

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.