Dateipfad

  • Hallo,

    ich habe ein Array das ein Abbild einer Ordnerstruktur enthält zb:

    Code
    \\asdf\jkl\dsl\tzu\567\Autodesk-Viewer-2013\
    \\asdf\jkl\dsl\tzu\567\Autodesk-Viewer-2013\Autodesk Viewer 2013 Icons\
    \\asdf\jkl\dsl\tzu\567\-GoogleChrome\
    \\asdf\jkl\dsl\tzu\567\-GoogleChrome\Chrome Icons\

    Und ich möchte jeweils die den letzten Ordner erhalten, sprich zb

    Code
    \\asdf\jkl\dsl\tzu\567\Autodesk-Viewer-2013\  => Autodesk-Viewer-2013
    \\asdf\jkl\dsl\tzu\567\Autodesk-Viewer-2013\Autodesk Viewer 2013 Icons\ => Autodesk Viewer 2013 Icons
    \\asdf\jkl\dsl\tzu\567\GoogleChrome\ => GoogleChrome
    \\asdf\jkl\dsl\tzu\567\GoogleChrome\Chrome Icons\ => Chrome Icons

    Wenn ich jetzt jedoch per

    [autoit]

    StringInStr($list[$i], "\", 0, -1, 1)

    [/autoit]


    nach dem vorletztem Backslash suche, dann erhalte ich irgendwie nur "2" als Rückgabe.

    Hättet ihr einen Tipp, wie ich zum gesuchten komme?

    Vielen Dank!

    Einmal editiert, zuletzt von Lausbube (29. Januar 2015 um 16:27)

  • Es gibt garantiert einige Varianten, hier meine:


    [autoit]


    #include <StringConstants.au3>
    #include <MsgBoxConstants.au3>
    local $Pfade[6]

    [/autoit][autoit][/autoit][autoit]

    $Pfade[0]= "\\asdf\jkl\dsl\tzu\567\Autodesk-Viewer-2013\"
    $Pfade[1]= "\\asdf\jkl\dsl\3343\5612127\234324\GoogleChrome\"
    $Pfade[2]= "\\asdf\jkl\dsl\tzu\567\Autodesk-Viewer-2013\Kartoffelecke"
    $Pfade[3]= "\\asdf\jkl\dsl\tzu\567\Nasenbaer\1\2\3\4\lol"
    $Pfade[4]= "\\asdf\jkl\dsl\tzu\567\Autodesk-Viewer-2013\Steinkohle\Elefant\Iltisratte"
    $Pfade[5]= "\\Egon\Gagamehl\Peter\"

    [/autoit][autoit][/autoit][autoit]

    for $i = 0 to ubound($Pfade)
    local $PfadFormatiert = Stringsplit(stringreverse($Pfade[$i]),"\") ;String invertieren, da relevante Information am Ende
    if $PfadFormatiert[1] = "" then ;Checken ob ein \ am Anfang steht
    msgbox(0,"",stringreverse($PfadFormatiert[2]))
    else
    msgbox(0,"",stringreverse($PfadFormatiert[1]))
    endif
    Next

    [/autoit]

    Einmal editiert, zuletzt von KloMeister (28. Januar 2015 um 12:24)

  • Es ware so möglich:

    [autoit]


    $string = "\\asdf\jkl\dsl\tzu\567\-GoogleChrome\Chrome Icons\"

    [/autoit][autoit][/autoit][autoit]

    $secondSlash = StringInStr($string,"\",0,-2) ; Hier könnte man noch abfragen ob das letzte Zeichen überhaupt ein \ ist, und je nachdem, die Occurrence auf -1 oder -2 setzen

    [/autoit][autoit][/autoit][autoit]

    $string = StringTrimLeft($string,$secondSlash)
    $string = StringTrimRight($string,1) ; Selbe gilt auch hier für den letzten Backslash

    [/autoit][autoit][/autoit][autoit]

    MsgBox(0,"",$string)

    [/autoit][autoit][/autoit][autoit][/autoit]

    Oder mid StringMid oder StringRegExp...
    Generell kann ich dir doch die folgende Funktion/UDF ans Herz legen wenn man mit Pfaden arbeitet :) :
    http://www.autoitscript.com/forum/topic/41…hsplitbyregexp/

  • Ich würde es so machen:

    [autoit]

    $string = "\\asdf\jkl\dsl\tzu\567\Autodesk-Viewer-2013\"

    [/autoit][autoit][/autoit][autoit]

    StringReplace($string, "\", " ")
    $fPos = @extended; @extended gibt im Erfolgsfall die Anzahl der umbenannten "\" wieder.
    ;~ MsgBox(0,"", @extended)

    [/autoit][autoit][/autoit][autoit]

    $fFullpath = StringSplit($string, "\"); String wird gesplittet beim "\"

    [/autoit][autoit][/autoit][autoit]

    $folder = $fFullpath[$fPos]; Der Ordner um den es dir geht, ist der $fPos-te Splitt.

    [/autoit][autoit][/autoit][autoit]

    MsgBox(0,"", $folder); Ergebnis zur Ansicht

    [/autoit]

    Das kann man natürlich noch kürzen. $folder braucht man ja nicht mehr zu füllen. Ich habe das nur mal der Darstellung wegen gemacht. Das ganze in einer Schleife.

    Grüße autoiter

    • Offizieller Beitrag

    Hier mit StringRegExpReplace:

    Spoiler anzeigen
    [autoit]


    #include <Array.au3>
    Global $aPath[4] = ['\\asdf\jkl\dsl\tzu\567\Autodesk-Viewer-2013\', _
    '\\asdf\jkl\dsl\tzu\567\Autodesk-Viewer-2013\Autodesk Viewer 2013 Icons\', _
    '\\asdf\jkl\dsl\tzu\567\-GoogleChrome\', _
    '\\asdf\jkl\dsl\tzu\567\-GoogleChrome\Chrome Icons\']

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 0 To UBound($aPath) - 1
    $aPath[$i] = StringRegExpReplace($aPath[$i], '.+\\(.+)\\', '$1')
    Next
    _ArrayDisplay($aPath)

    [/autoit]
  • @BugFix
    meinst du _PathSplit?
    Damit gehts nur bedingt, da der letzte Ordner nicht separat ausgegeben wird.
    Man müsste also noch weitere Funktionen anwenden, um an den letzten Ordner zu kommen.

  • An dieser Stelle ein dickes Danke für die Lösungsvorschläge!
    Auf die Idee den String/Array Inhalt umzudrehen hätte ich auch kommen können, aber manchmal ist man wohl einfach blind....

    Danke!