Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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?

Geschrieben

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

Geschrieben

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.

Geschrieben

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

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

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

Geschrieben

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

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...