__SplitArgs (Argumente in einem Funktionsaufruf zerlegen)

  • Hatte ich gerade in den unendlichen Weiten zwischen meinen Test-Programmen entdeckt ...

    Eine Funktion zum Zerlegen von Funktionsaufrufen in einzelne Parameter.
    In erster Linie interessant, wenn man AutoIt-Quellcode bearbeiten möchte.

    Beispiel und Funktion:

    Spoiler anzeigen
    [autoit]

    #Region Includes
    #include <Array.au3>
    #EndRegion Includes

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

    Main()

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

    Func Main()
    Local $s = 'true,"test" , $test[2][3], $test[4], @AppDataDir, 2,23.343, " ", "$test'' ,2" , _Function("test", ''test2'', StringStripWS($b,3)), "test3", false , '' " Test", ,, ,, 4 '',""'
    Local $a = __SplitArgs($s)
    _ArrayDisplay($a)
    EndFunc ;==>Main

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

    ; #FUNCTION# ===================================================================
    ; Name ..........: __SplitArgs
    ; Description ...:
    ; AutoIt Version : V3.3.0.0
    ; Syntax ........: __SplitArgs($s)
    ; Parameter(s): .: $s - Arguments as string
    ; Return Value ..: Success - Array
    ; Failure -
    ; Author(s) .....: Thorsten Willert
    ; Date ..........: Wed Dec 23 18:40:57 CET 2009
    ; Version .......: 2.0
    ; ==============================================================================
    Func __SplitArgs($s)
    Local $r[1] = [""], $t, $b1 = False, $b2 = False, $iP = 0

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

    For $i = 1 To StringLen($s)
    $t = StringMid($s, $i, 1)
    Select
    Case $t = " " And Not $b1 And Not $b2 And Not $iP
    ContinueLoop
    Case $t = '"' And $b1
    $b1 = False
    Case $t = '"' And Not $b2
    $b1 = True
    Case $t = "'" And $b2
    $b2 = False
    Case $t = "'" And Not $b1
    $b2 = True
    Case $t = ")" And $iP
    $iP -= 1
    Case $t = "("
    $iP += 1
    Case $t = "," And Not $b1 And Not $b2 And Not $iP
    $t = ''
    ReDim $r[UBound($r) + 1]
    EndSelect
    $r[UBound($r) - 1] &= $t
    Next

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

    If Not $r[0] Then Return SetError(1,0,$r)

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

    Return $r
    EndFunc ;==>_SplitArgs

    [/autoit]

    2 Mal editiert, zuletzt von Stilgar (10. Februar 2010 um 20:34)