reguläre Suche - Verzeichnisnamen

  • Hallo,

    vorab nebenbei gefragt: Gibt es bei AutoIt eine Funktion, um aus einem Pfad z.B. das letzte Unterverzeichnis (das erste Unterverzeichnis, das xte Unterverzeichnis) auszulesen oder würde man das mit StringRegExp (auslesen) bzw. StringRegExpReplace (entfernen) machen müssen?

    Wer mag beim Thema reguläre Suche helfen?

    StringRegExp($Verzeichnis_mit_den_Daten, regulärer Suchausdruck)

    Wie schreibt man, dass man das erste Vorkommen von "\ beliebige Zeichen \" bzw. das letzte Vorkommen von "\ beliebige Zeichen \" bzw. das xte Vorkommen von "\ beliebige Zeichen \ in dem String sucht?

    (1)

    Wie kann ich den letzten Ordner "01" aus dem Pfad mit StringRegExp (reguläre Suche) oder anderweitig (a) entfernen bzw. (b) in einer Variablen speichern?

    $Verzeichnis_mit_den_Daten = "d:\test\01\05\01\01\test.txt"

    (2)

    Wie kann ich den letzten Ordner "01" aus dem Pfad mit StringRegExp (reguläre Suche) oder anderweitig (a) entfernen bzw. (b) in einer Variablen speichern?

    $Verzeichnis_mit_den_Daten = "d:\test\01\05\01\01"

    (3)

    Wie kann ich das dritte Unterverzeichn (hier: "05") aus dem Pfad mit StringRegExp (reguläre Suche) oder anderweitig (a) entfernen bzw. (b) in einer Variablen speichern?

    $Verzeichnis_mit_den_Daten = "d:\test\01\05\01\test.txt"
    $Verzeichnis_mit_den_Daten = ""d:\test\01\05\01"

    Danke - und einen gelungenen Wochenstart :)

    Einmal editiert, zuletzt von AutoMit (31. Januar 2017 um 15:24)

    • Offizieller Beitrag

    Ich würde den Pfad aufsplitten und wieder neu zusammensetzen:

  • Danke Oscar, das ist eine gute Idee.

    Kannst Du das auch als reguläre Suche (siehe Beispiele 1 bis 3) formulieren?

    Ich würde gerne beim Thema reguläre Suche voran kommen, weil die Fragestelle "erste Fundstelle", "xte Fundstelle" und "letzte Fundstelle" in einer Zeichenkette häufiger vorkommt.

    Aus der Hilfe konnte ich bisher entnehmen:

    Falls "\" in dem ersetzen String vorkommt, so muss dieser gedoppelt werden.
    -> also \\ -> Findet alle tatsächlichen Backslashs (\)

    ^ für Zeilenanfang (ggf. nutzbar als "beginne am Zeilenanfang"?)

    $ fü Zeilenende (ggf. nutzbar als "beginne am Zeilenende"?)

    Über das offset könnte ich die xte Fundstelle festlegen.

    StringRegExp ( "test", "pattern" [, flag [, offset]] )
    offset = Die Position des Strings, wo die Funktion beginnen soll (startet bei 1). Der Standard ist 1.

    Finde beginnende vom Zeilenende $ das erste Vorkommen, welchen zwichen / und / steht.

    Weiter komme ich leider nicht.

    Einmal editiert, zuletzt von AutoMit (31. Januar 2017 um 15:32)

    • Offizieller Beitrag
    AutoIt
    ; == Wie schreibt man, dass man das erste Vorkommen von "\ beliebige Zeichen \" bzw. das letzte Vorkommen von "\ beliebige Zeichen \" bzw. das xte Vorkommen von "\ beliebige Zeichen \ in dem String sucht?
    ; StringInString - suchen von vorn mit positiver Zahl oder von hinten mit negativer Zahl für occurence
    
    
    Local $Verzeichnis_mit_den_Daten = "d:\test\01\05\01\01\test.txt"
    
    
    ; Bsp.: 2. '\'´von hinten
    $iPos = StringInStr($Verzeichnis_mit_den_Daten, '\', 0, -2)
  • Das geht auch mit RegExp, ist aber ein längeres Pattern:


    Müsste eigentlich so gehen.

  • Müsste eigentlich so gehen.

    Im Prinzip schon... allerdings wird hier gar nicht überprüft, ob es sich wirklich um ein Verzeichnis handelt... und ob der letzte Part auch ein Verzeichnis ist, oder doch eine Datei ohne Extension. Verlässlich damit hantieren kann man also nicht. Deshalb habe ich mir die Mühe gemacht und das Ganze ein wenig überarbeitet und auch ein paar alternative Funktionen mit reingepackt, die ich euch nicht vorenthalten wollte.

    PathEx
    PathEx_Demo

    Einmal editiert, zuletzt von Bitnugger (13. Februar 2017 um 15:44)