Pfade zerlegen und mit verschiedener Anzahl von "\" in eigene Variablen schreiben

  • VBScript

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von VaporiZed.

    Pfade zerlegen und mit verschiedener Anzahl von "\" in eigene Variablen schreiben

    Hallo da ich häufig mit VBS aber nicht dem vollen Programmierumfang zu tun habe, benötige ich für ein Projekt eure Hilfe.
    Ich habe bereits mehere Beispiele getestet, die ich finden konnte. Unteranderem die Split funktion.

    Also,
    es geht um folgenden Fall. Ich möchte meine Variable HIERARCHY
    auswerten, diese enthält je nach Projekt mal mehr oder mal weniger
    Untergruppen.

    Bsp: HIERARCHY=\Theke\Alle_Container\1_Container_Wand\Boden

    Das bedeutet, es geht um ein Objekt das als Theke in einem CAD Programm definiert wurde, darin enthalten ist die Gruppe Alle_Container und in dieser Gruppe wieder eine Gruppe namens 1_Container

    Ich hatte nun die idee, diesen Pfad von rechts nach links auszulesen und jedes Verzeichnis in eine neue Variable zu schreiben.

    Das war mein erster Versuch. Hat jemand vielleicht einen Tip oder ein besseres Beispiel ?

    VB.NET-Quellcode

    1. Dim strPfad
    2. Dim strVerzeichnis1
    3. Dim strVerzeichnis2
    4. Dim strVerzeichnis3
    5. Dim strVerzeichnis4
    6. Dim strVerzeichnis5
    7. 'strPfad = HIERARCHY
    8. strPfad = "\Theke\Alle_Container\1_Container_Wand\Boden"
    9. ' Verzeichnis 1
    10. If Mid(strPfad, 1, 1) = "\" Then
    11. strVerzeichnis1 = Left(strPfad, 8)
    12. Else
    13. strVerzeichnis1 = vbNullString
    14. End If
    15. MsgBox "Verzeichnis 1: " & strVerzeichnis1
    16. ' Verzeichnis 2
    17. strVerzeichnis2 = Left(strPfad, InStrRev(strPfad, "\") - 1)
    18. MsgBox "Verzeichnis 2: " & strVerzeichnis2
    19. ' Verzeichnis 3
    20. strVerzeichnis3 = Mid(strPfad, InStrRev(strPfad, "\") + 1)
    21. MsgBox "Verzeichnis 3: " & strVerzeichnis3
    22. ' Verzeichnis 4
    23. If InStrRev(strPfad, "\") = 0 Then
    24. strVerzeichnis4 = ""
    25. Else
    26. strVerzeichnis4 = Mid(strPfad, InStrRev(strPfad, "\"))
    27. End If
    28. MsgBox "Verzeichnis 4: " & strVerzeichnis4
    29. 'MsgBox "Zeile 172: " & HIERARCHY


    *Thema verschoben und CodeTags eingefügt - Bitte etwas mehr mühe geben!!* ~NoFear23m

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Nofear23m“ ()

    Splitte den Pfad bei „/“. Dann hast nen String Array und kannst damit dann weiter arbeiten.

    -> String.Split()
    Wie das genau geht bekommst du dann hin oder?

    Du hast im Thema VB.Net angegeben, schreibst aber von VBS ... was denn nu?
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    @mariorunge Willkommen im Forum. :thumbup:
    Wenn das ein Pfad ist, kannst Du es wie einen Pfad behandeln:

    VB.NET-Quellcode

    1. Dim di = New IO.FileInfo(DEIN_PFAD).Directory ' DirectoryInfo des Verzeichnises Deiner Datei
    2. Dim parent = di.Parent ' DirectoryInfo des Parent-Verzeichnisses
    3. Dim folder = parent.Name ' dessen Name
    und dann durchiterieren.
    ====
    Wenn nicht, probiere trotzdem mal, das einer FileInfo- oder einer DirectoryInfo-Instanz zuzuweisen und sieh nach, was da passiert...
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „RodFromGermany“ ()

    Ebenfalls willkommen im Forum.

    Bitte kläre nochmal, ob wir bei VBScript sind. Ich vermute aufgrund Deines Eingangposts, dass dem so ist, aber sicher bin ich mir auch nicht. Die Moderation muss es wissen, um das hier in das richtige Unterforum zu verschieben.

    Das Aufteilen eines Textes in einzelne Teile geht in VBS, wie in den Zeilen#3--4 angezeigt. Die Anzeige der einzelnen Pfadbestandteile ist in Z#5-#7:

    Visual Basic-Quellcode

    1. Dim strPfad
    2. strPfad = "\Theke\Alle_Container\1_Container_Wand\Boden"
    3. Dim Parts
    4. Parts = Split(strPfad, "\")
    5. For Each Part In Parts
    6. If Part <> "" Then MsgBox(Part)
    7. Next

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Danke erstmal euch allen für die schnellen Antworten!!

    Visual Basic-Quellcode

    1. ' \Theke\Alle_Container\1_Container_Wand\Boden
    2. DIM Part
    3. Dim Parts
    4. Dim strPfad
    5. strPfad = "\Theke\Alle_Container\1_Container_Wand\Boden"
    6. Parts = Split(strPfad, "\")
    7. For Each Part In Parts
    8. If Part <> "" Then MsgBox(Part)
    9. Next
    10. '---------------------------------------------------------------------------



    @ VaporiZed auf diese Weise hatte ich es auch schon versucht und die MsgBox gibt mir auch die Werte aus, die ich benötige.
    Nur komm ich an dieser Stelle nicht weiter, ich benötige die Ausgaben in einer Variablen z.B. in

    DIM Ebene1
    DIM Ebene2
    DIM Ebene3
    usw...

    Um sie später in einer anderen Funktion abzufragen.
    Oder gibt es hierfür vielleicht eine Funktion, die von rechts an anfängt zu lesen und dann immer nur bis zum nächsten "\" ausliest ?


    Ich hätte folgende Idee (auf Deutsch):

    DIM Ebene1
    DIM Ebene2
    DIM Ebene3
    usw...

    Ebene1 = von rechts bis "\"

    Ebene2 von rechts ab ersten "\" bis "\"

    Ebene3 von rechts ab zweiten "\" bis "\"

    Ebene4 von rechts ab dritten "\" bis "\"
    usw..

    Hat da jemand eine Idee ?

    Danke schonmal allen für die Hilfe!

    Gruß Mario
    Wo ist das Problem?

    Visual Basic-Quellcode

    1. Dim strPfad
    2. strPfad = "\Theke\Alle_Container\1_Container_Wand\Boden"
    3. Dim Parts
    4. Parts = Split(strPfad, "\")
    5. Dim Ebene1, Ebene2, Ebene3, Ebene4, Ebene5, Ebene6
    6. Call AssignToLevel(1, Ebene1)
    7. Call AssignToLevel(2, Ebene2)
    8. Call AssignToLevel(3, Ebene3)
    9. Call AssignToLevel(4, Ebene4)
    10. Call AssignToLevel(5, Ebene5)
    11. Call AssignToLevel(6, Ebene6)
    12. MsgBox Ebene1
    13. MsgBox Ebene2
    14. MsgBox Ebene3
    15. MsgBox Ebene4
    16. MsgBox Ebene5
    17. MsgBox Ebene6
    18. Sub AssignToLevel(LevelID, ByRef Level)
    19. If Ubound(Parts) < LevelID Then Exit Sub
    20. Level = Parts(Ubound(Parts) - LevelID + 1)
    21. End Sub

    Die Bestandteile werden zu Ebene 1 - 5 zugeordnet, Ebene6 nicht, da es nicht so viele Pfadbestandteile gibt. Ebene5 bleibt korrekt leer, weil das erste Zeichen des Pfads ein \ ist.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.