Eigene function _Splittpfad anstatt _PathSplit

  • Hallo zusammen,


    ich moechte gerne eine Pfad aufsplitten,

    und zwar nicht wie die originale Splitt- Funktion ( _PathSplit ),

    sondern folgendermassen.


    AufRuf: _Splittpfad (String, MaxLaenge in Zeichen)


    ==> Ein Pfad sollte in Einzelstrings ( Zeilen ) mit der Maximallaenge von "MaxLaenge in Zeichen" zerlegt werden.
    Ausnahme: Es darf kein Einzelverzeichnis geteilt werden.


    BeiSpiel:

    $Pfad = "E:\Musik_Dateien\Karl\Udo_Lindenberg_Unplugged_(Live_Aus_Dem_Hotel_Atlantic)\104 Gegen die Stroemung (feat. Jennifer weist of Jennifer Rostock)\WavFiles\1.wav"

    $AusgabeText = _SplittPfad ( $Pfad , 35)


    Der $AusgabeText sollte dann so ausehen:


    E:\Musik_Dateien\Karl\

    Udo_Lindenberg_Unplugged_(Live_Aus_Dem_Hotel_Atlantic)\

    104 Gegen die Stroemung (feat. Jennifer weist of Jennifer Rostock)\

    WavFiles\1.wav


    Nicht so:


    E:\Musik_Dateien\Karl\

    Udo_Lindenberg_Unplugged_(Live_Aus_

    Dem_Hotel_Atlantic)\104 Gegen die

    Stroemung (feat. Jennifer weist o

    f Jennifer Rostock)\WavFiles\1.wav


    Ich bastle schon geraume Zeit, finde aber keine Loesung.

    Hat jemand einen Tipp fuer mich,

    oder kennt jemand schon eine Loesung?


    Servus:


    Euer Cubaner

  • Hallo Bugfix,


    Danke fuer die schnelle Auskunft.


    leider haben meine Bemuehungen die beiden Beitrage, mittels der Suchfunktion, zu finden nicht gefruchtet.


    Vielleicht kannst Du mir etwas mehr Infos fuer die Suche geben.


    Danke,


    Euer Cubaner

  • Hallo zusammen,


    Ich moechte mich zuerst mal bedanken und entschuldigen, dass ich mich fuer die Hilfe noch nicht gedankt habe.


    ( Hatte etwas Stress )


    Vielleicht habe ich meine Frage etwas unverstaendlich formuliert.

    Eure Vorsschlaege halfen mir nicht wirklich, daher nochmals mein Anliegen:


    Ich moechte gerne einen Pfad aufsplitten,

    und zwar nicht wie die originale Splitt- Funktion ( _PathSplit ),

    sondern folgendermassen.


    AufRuf: _Splittpfad (String, MaxLaenge in Zeichen)


    ==> Ein Pfad sollte in Einzelstrings ( Zeilen ) mit der MaximalLaenge von "MaxLaenge in Zeichen" zerlegt werden.


    Ausnahme: Es darf kein Einzelverzeichnis geteilt werden.


    BeiSpiel:


    $Pfad = "E:\Musik_Dateien\Karl\Udo_Lindenberg_Unplugged_(Live_Aus_Dem_Hotel_Atlantic)\104 Gegen die Stroemung (feat. Jennifer weist of Jennifer Rostock)\WavFiles\1.wav"


    $AusgabeText = _SplittPfad ( $Pfad , 35)


    Der $AusgabeText sollte dann so ausehen:


    E:\Musik_Dateien\Karl\

    Udo_Lindenberg_Unplugged_(Live_Aus_Dem_Hotel_Atlantic)\

    104 Gegen die Stroemung (feat. Jennifer weist of Jennifer Rostock)\

    WavFiles\1.wav


    Nicht so:


    E:\Musik_Dateien\Karl\

    Udo_Lindenberg_Unplugged_(Live_Aus_

    Dem_Hotel_Atlantic)\104 Gegen die

    Stroemung (feat. Jennifer weist o

    f Jennifer Rostock)\WavFiles\1.wav


    Ich bastle schon geraume Zeit, finde aber keine Loesung.


    Hat jemand einen Tipp fuer mich,

    oder kennt jemand schon eine Loesung?


    Servus:

    Euer Cubaner

    • Offizieller Beitrag

    Ein bischen splitten, zählen und zusammenfügen ;)

    [autoit]

    $Pfad = "E:\Musik_Dateien\Karl\Udo_Lindenberg_Unplugged_(Live_Aus_Dem_Hotel_Atlantic)\104 Gegen die Stroemung (feat. Jennifer weist of Jennifer Rostock)\WavFiles\1.wav"
    $AusgabeText = _SplittPfad ( $Pfad , 35)
    ConsoleWrite($AusgabeText & @crlf)

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

    Func _SplittPfad($_sPath, $_iLen)
    Local $aSplit = StringSplit($_sPath, '\'), $sOut = '', $sTmp = ''
    For $i = 1 To $aSplit[0]
    Switch $i
    Case 1
    $sTmp = $aSplit[$i] & '\'
    Case $aSplit[0]
    If (StringLen($sTmp) + StringLen($aSplit[$i])) >= $_iLen Then
    $sOut &= $sTmp & @CRLF & $aSplit[$i] & @CRLF
    Else
    $sOut &= $sTmp & $aSplit[$i] & @CRLF
    EndIf
    Case Else
    If (StringLen($sTmp) + StringLen($aSplit[$i]) +1) >= $_iLen Then
    $sOut &= $sTmp & @CRLF
    $sTmp = $aSplit[$i] & '\'
    Else
    $sTmp &= $aSplit[$i] & '\'
    EndIf
    EndSwitch
    Next
    Return $sOut
    EndFunc

    [/autoit]
  • Von dir hätte ich jetzt eigentlich erwartet, dass du ein Array zurückgibst. ;)

  • Ein bischen splitten, zählen und zusammenfügen ;)


    Verwende ein bisschen RegEx und du hast es in einer Zeile ;)

    [autoit]

    Func _SplitPath($_sPath, $_iLen)
    ; Pro Array-Element max. $i_Len Zeichen, aber immer komplette Verzeichnisnamen
    Local $aResult = StringRegExp($_sPath, ".{1," & ($_iLen-1) & "}(?:/|\\|\Z)|[^/\\]+(?:/|\\|\Z)", 3)
    If @error Then Return SetError(1, 0, False)
    Return $aResult
    EndFunc

    [/autoit]
  • Hallo zusammen,


    hallo BugFix, hallo progandy.

    Danke für die superschnellen Antworten, beide Lösungen sind toll.

    Wobei ich die Lösung von Bugfix noch geistig nachvollziehen kann,

    ( hatte einen ähnlchen Ansatz, hab mich aber irgendwo verrand ).

    progandy's Lösung mittels RegEx ist mir ehrlich gesagt zu hoch.

    ( Vielleicht sollte ich mich damit mal ernsthaft beschäftigen ).


    Nochmals Danke


    Euer Cubaner