Execute funktioniert nicht

  • Hallo,

    bei meinem Script funktionier der Befehle Execute nicht. Es wird alles richtig übergeben aber es funzt halt nicht :(

    Spoiler anzeigen
    [autoit]

    $Source = 'For $FNLoop = 5 To 10' & @CRLF _
    & 'MsgBox(0,"","")' & @CRLF _
    & 'Next'

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

    _RunPlugIn($Source)

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

    ; #FUNCTION# ====================================================================================================================
    ; Name...........: _RunPlugIn
    ; Description ...: Führt einen Plug-In aus
    ; Syntax.........: _RunPlugIn($Source)
    ; Parameters ....: $Source - Source in AutoIt
    ; Author ........: Burak Keskin <[email='Burak.keskin@arcor.de'][/email]>
    ; ===============================================================================================================================
    Func _RunPlugIn($Source)

    Local $StartLoop_Line, $EndLoop_Line

    $Split1 = StringSplit($Source, @LF)

    For $NextLoop1 = 1 To $Split1[0]

    $Split2 = StringSplit($Split1[$NextLoop1], "=")
    $Split3 = StringSplit($Split1[$NextLoop1], " ")

    If $Split3[1] = "For" Then

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

    $StartLoop_Line = $NextLoop1

    For $NextLoop2 = $StartLoop_Line To $Split1[0]
    If StringInStr($Split1[$NextLoop2], "Next") Then
    $EndLoop_Line = $NextLoop2
    ExitLoop
    EndIf
    Next

    $From = $Split3[4]
    $To = $Split3[6]
    $StartLoop_Line += 1
    $EndLoop_Line -= 1

    For $NextLoop3 = Number($From) To Number($To)
    For $FNLoop = Number($StartLoop_Line) To Number($EndLoop_Line)
    Execute($Split1[$FNLoop]) ;Funktioniert nicht :(
    Next
    Next

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

    EndIf
    Next
    EndFunc ;==>_RunPlugIn

    [/autoit]
  • Hallo BugFix,

    ja das weiß ich auch. Macht es in meinem Beispiel ja auch. Hier nochmal mit msgBox:

    Spoiler anzeigen
    [autoit]

    $Source = 'For $FNLoop = 5 To 10' & @CRLF _
    & 'MsgBox(0,"","")' & @CRLF _
    & 'Next'

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

    _RunPlugIn($Source)

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

    ; #FUNCTION# ====================================================================================================================
    ; Name...........: _RunPlugIn
    ; Description ...: Führt einen Plug-In aus
    ; Syntax.........: _RunPlugIn($Source)
    ; Parameters ....: $Source - Source in AutoIt
    ; Author ........: Burak Keskin <[email='Burak.keskin@arcor.de'][/email]>
    ; ===============================================================================================================================
    Func _RunPlugIn($Source)

    Local $StartLoop_Line, $EndLoop_Line

    $Split1 = StringSplit($Source, @LF)

    For $NextLoop1 = 1 To $Split1[0]

    $Split2 = StringSplit($Split1[$NextLoop1], "=")
    $Split3 = StringSplit($Split1[$NextLoop1], " ")

    If $Split3[1] = "For" Then

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

    $StartLoop_Line = $NextLoop1

    For $NextLoop2 = $StartLoop_Line To $Split1[0]
    If StringInStr($Split1[$NextLoop2], "Next") Then
    $EndLoop_Line = $NextLoop2
    ExitLoop
    EndIf
    Next

    $From = $Split3[4]
    $To = $Split3[6]
    $StartLoop_Line += 1
    $EndLoop_Line -= 1

    For $NextLoop3 = Number($From) To Number($To)
    For $FNLoop = Number($StartLoop_Line) To Number($EndLoop_Line)
    MsgBox(0,"Code",$Split1[$FNLoop])
    Execute($Split1[$FNLoop]) ;Funktioniert nicht :(
    Next
    Next

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

    EndIf
    Next
    EndFunc ;==>_RunPlugIn

    [/autoit]
    • Offizieller Beitrag

    Ich meinte nicht Codezeile, sondern Programmzeilen.
    So kannst du einen Ein-Zeilen-Code mit Schleife ausführen:

    [autoit]

    If FileWrite(@TempDir & "\temp.script.au3", _
    'For $FNLoop = 5 To 10' & @CRLF & _
    'MsgBox(0,"Test","Loop " & $FNLoop)' & @CRLF & _
    'Next') _
    And Run(@AutoItExe & ' /AutoIt3ExecuteScript "' & @TempDir & '\temp.script.au3"') _
    And Sleep(1000) _
    And FileDelete(@TempDir & "\temp.script.au3") Then Exit

    [/autoit]
    • Offizieller Beitrag

    Also nochmal:
    - Execute erlaubt nur einen Befehl / Befehlszeile
    - jede Schleife besteht aber aus: Befehl Schleifenanfang + Befehl(e) in der Schleife + Befehl Schleifenende

    Versuch doch mal: For $i=0 To 20 auszuführen ;) ==> geht nicht!
    Und darum macht Execute das auch nicht.

  • Zitat

    Also nochmal:
    - Execute erlaubt nur einen Befehl / Befehlszeile
    - jede Schleife besteht aber aus: Befehl Schleifenanfang + Befehl(e) in der Schleife + Befehl Schleifenende

    Versuch doch mal: For $i=0 To 20 auszuführen ;) ==> geht nicht!
    Und darum macht Execute das auch nicht.

    Ich glaube ich habs falsch erklärt.
    Also die folgenden Werte werden an Execute in meinem Script übergeben:

    1.> MsgBox(0,"","")
    2.> MsgBox(0,"","")
    3.> MsgBox(0,"","")
    4.> MsgBox(0,"","")
    5.> MsgBox(0,"","")

    So. Die Befehle For und Next werden dabei herausgefiltert. Es werden nur die gesposteten Werte übergeben. (Einzeln)

    • Offizieller Beitrag

    Aber warum machst du es dir so schwer?
    Ist folgendes nicht viel einfacher?

    [autoit]

    ; PlugIn erstellen:
    $plugin1 = @ScriptDir & '\plugin1.au3'
    FileWrite($plugin1, _
    "For $FNLoop = 1 To 5" & @CRLF _
    & @TAB & "MsgBox(0,'Test','Loop ' & $FNLoop)" & @CRLF & _
    "Next")

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

    ; PlugIn ausführen
    RunPlugIn($plugin1)

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

    Func RunPlugIn($PluginPath)
    Run(@AutoItExe & ' /AutoIt3ExecuteScript "' & $PluginPath & '"')
    EndFunc

    [/autoit]
  • Zitat

    Aber warum machst du es dir so schwer?
    Ist folgendes nicht viel einfacher?

    Sicher ist das einfacher. Aber mit meinem kann man sozusagen auch auf die Variablen des Hauptscriptes zugreifen bzw. ändern.
    Aber es geht doch drum warum Execute dabei nicht funktioniert. Es wird doch nur 5x 'MsgBox(0,"","")' übergeben.


    Gelöst