Variablennamen zur Laufzeit gestalten/auswerten ?

    • Offizieller Beitrag

    Hi,
    vielleicht ist das Problem ja ganz simpel zu lösen -aber ich hab da 'nen Hänger.
    Ich möchte z.B. 31 Radio-Control's erstellen. Und da ich ja faul bin ;) am liebsten in einer Schleife. Etwa so, allerdings funktioniert die Syntax für den Variablennamen so nicht.

    [autoit]

    $top = 15
    For $i = 1 To 31
    $Radio & $i = GUICtrlCreateRadio($i, 20, $i*$top, 30, 15) ; soll dann $Radio1, $Radio2 usw. ergeben
    Next

    [/autoit]


    Gibt ja häufiger Situationen, in denen Controls mit fortlaufender Nummerierung existieren und wo es sinnvoll wäre, den numerischen Bestandteil des Variablennamens, wie im obigen Bsp. in einer Zählschleife auszuwerten oder festzulegen.
    Das war nur ein Bsp., mir geht es grundsätzlich darum: Kann ich Variablennamen zusammensetzen oder Bestandteile des Namens auswerten?

    • Offizieller Beitrag

    Ahh..
    Danke, Assign( ) und Eval( ) - das paßt.


    EDIT:
    Hier warum ich es brauchte. Aus meiner http://autoit.aufwaerts.de/thread.php?threadid=595. Mal im Vergleich der alte Code und nun mit Assign( ) und Eval( ).

    Spoiler anzeigen


    alte Version:

    [autoit]

    $day1 = GUICtrlRead($R1)
    $day2 = GUICtrlRead($R2)
    $day3 = GUICtrlRead($R3)
    $day4 = GUICtrlRead($R4)
    $day5 = GUICtrlRead($R5)
    $day6 = GUICtrlRead($R6)
    $day7 = GUICtrlRead($R7)
    $day8 = GUICtrlRead($R8)
    $day9 = GUICtrlRead($R9)
    $day10 = GUICtrlRead($R10)
    $day11 = GUICtrlRead($R11)
    $day12 = GUICtrlRead($R12)
    $day13 = GUICtrlRead($R13)
    $day14 = GUICtrlRead($R14)
    $day15 = GUICtrlRead($R15)
    $day16 = GUICtrlRead($R16)
    $day17 = GUICtrlRead($R17)
    $day18 = GUICtrlRead($R18)
    $day19 = GUICtrlRead($R19)
    $day20 = GUICtrlRead($R20)
    $day21 = GUICtrlRead($R21)
    $day22 = GUICtrlRead($R22)
    $day23 = GUICtrlRead($R23)
    $day24 = GUICtrlRead($R24)
    $day25 = GUICtrlRead($R25)
    $day26 = GUICtrlRead($R26)
    $day27 = GUICtrlRead($R27)
    $day28 = GUICtrlRead($R28)
    $day29 = GUICtrlRead($R29)
    $day30 = GUICtrlRead($R30)
    $day31 = GUICtrlRead($R31)

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

    $mon1 = GUICtrlRead($R1m)
    $mon2 = GUICtrlRead($R2m)
    $mon3 = GUICtrlRead($R3m)
    $mon4 = GUICtrlRead($R4m)
    $mon5 = GUICtrlRead($R5m)
    $mon6 = GUICtrlRead($R6m)
    $mon7 = GUICtrlRead($R7m)
    $mon8 = GUICtrlRead($R8m)
    $mon9 = GUICtrlRead($R9m)
    $mon10 = GUICtrlRead($R10m)
    $mon11 = GUICtrlRead($R11m)
    $mon12 = GUICtrlRead($R12m)

    Select
    Case $day1 = 1
    $D = 1
    Case $day2 = 1
    $D = 2
    Case $day3 = 1
    $D = 3
    Case $day4 = 1
    $D = 4
    Case $day5 = 1
    $D = 5
    Case $day6 = 1
    $D = 6
    Case $day7 = 1
    $D = 7
    Case $day8 = 1
    $D = 8
    Case $day9 = 1
    $D = 9
    Case $day10 = 1
    $D = 10
    Case $day11 = 1
    $D = 11
    Case $day12 = 1
    $D = 12
    Case $day13 = 1
    $D = 13
    Case $day14 = 1
    $D = 14
    Case $day15 = 1
    $D = 15
    Case $day16 = 1
    $D = 16
    Case $day17 = 1
    $D = 17
    Case $day18 = 1
    $D = 18
    Case $day19 = 1
    $D = 19
    Case $day20 = 1
    $D = 20
    Case $day21 = 1
    $D = 21
    Case $day22 = 1
    $D = 22
    Case $day23 = 1
    $D = 23
    Case $day24 = 1
    $D = 24
    Case $day25 = 1
    $D = 25
    Case $day26 = 1
    $D = 26
    Case $day27 = 1
    $D = 27
    Case $day28 = 1
    $D = 28
    Case $day29 = 1
    $D = 29
    Case $day30 = 1
    $D = 30
    Case $day31 = 1
    $D = 31
    EndSelect

    Select
    Case $mon1 = 1
    $mon = 1
    Case $mon2 = 1
    $mon = 2
    Case $mon3 = 1
    $mon = 3
    Case $mon4 = 1
    $mon = 4
    Case $mon5 = 1
    $mon = 5
    Case $mon6 = 1
    $mon = 6
    Case $mon7 = 1
    $mon = 7
    Case $mon8 = 1
    $mon = 8
    Case $mon9 = 1
    $mon = 9
    Case $mon10 = 1
    $mon = 10
    Case $mon11 = 1
    $mon = 11
    Case $mon12 = 1
    $mon = 12
    EndSelect

    [/autoit]

    und DAS SELBE Ergebnis neu:

    [autoit]

    For $i = 1 To 31
    Assign("day" & $i, GUICtrlRead(Eval("R" & $i))) ; $day1-$day31 = GUICtrlRead($R1-$R31)
    Next

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

    For $i = 1 To 12
    Assign("mon" & $i, GUICtrlRead(Eval("R" & $i & "m"))) ; $mon1-12 = GUICtrlRead($R1m-$R12m)
    Next

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

    For $i = 1 To 31
    If Eval("d"&"a"&"y"&$i) = 1 Then ; If $day1-$day31 = 1 Then $D = $i
    $D = $i
    ExitLoop
    EndIf
    Next

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

    For $i = 1 To 12
    If Eval("m"&"o"&"n"&$i) = 1 Then ; If $mon1-$mon12 = 1 Then $D = $i
    $mon = $i
    ExitLoop
    EndIf
    Next

    [/autoit]