Variable aus String generieren

  • Hey,

    ich suche eine Möglichkeit, aus einem String eine Variable mit dem Namen des Strings zu generieren... Wusste es schon mal, hab den Befehl vergessen! Wird auch teilweise in Obfuscatoren genutzt, zur Verschleierung der Variablen, meine ich....

    James1337 hat mir im Chat schon "Assign" ans Herz gelegt, was auch gut ist, allerdings gab es auch einen Befehl, der keine vorherige Deklaration verlangt, sondern selber direkt deklariert, meine ich...

    Ich weiß, dass das eig. nicht "notwendig" ist, da es Arrays gibt, aber möchte halt sowas in der Art ermöglichen:

    [autoit]

    For $i = 1 To 3
    ???("Var" & $i) = $i * $i ; Ergibt: $Var1 = 1, $Var2 = 4, $Var3 = 9
    Next

    [/autoit]


    LG,
    Aca


    *edit*
    Oder trügt mich meine Erinnerung und ich habe "Eval" im Kopf? xD

    Einmal editiert, zuletzt von Acanis (8. August 2012 um 16:33)

  • James1337 hat mir im Chat schon "Assign" ans Herz gelegt, was auch gut ist, allerdings gab es auch einen Befehl, der keine vorherige Deklaration verlangt, sondern selber direkt deklariert, meine ich...

    Assign erstellt (ausser mit Flag 4) die Variable:

    [autoit]

    If Not IsDeclared ("A") then
    if MsgBox(4,"", "$A ist NICHT deklariert"&@CRLF&"Jetzt erstellen?") =6 Then
    Assign("a","A wurde erstellt und dieser Text wurde zugewiesen")
    MsgBox(0,"$A = ",Eval("A"))
    EndIf
    EndIf
    If IsDeclared ("A") then ConsoleWrite("A: " & Eval("A") & @CRLF)
    ;ConsoleWrite($A & @CRLF) ;diese Zeile ergbt einen Fehler

    [/autoit]

    du kannst sie aber (meist) nur über Eval ansprechen,

    mfg autoBert

  • Danke dir...

    Das habe ich durch James und Minx Hilfe im "Plauderkasten" grade auch raus bekommen :D!

    [autoit]

    For $i = 1 To 3
    Assign("Var" & $i, $i * $i); Ergibt: $Var1 = 1, $Var2 = 4, $Var3 = 9
    Next

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

    MsgBox(4096, "", Eval("Var2"))

    [/autoit]

    Das geht halt... Ist aber komisch... Warum kann man die "meist" nur über Eval ansprechen? Nice2know auf jeden Fall!

    Hast du eine Ahnung, warum man die nicht normal ansprechen kann? :) Oder wie man das umgehen kann?^^


    Und warum sollte man nicht damit arbeiten :P?


    Auf jeden Fall danke für das Beispielscript^^! Vermittelt gut Verständnis dafür :)!

    LG,
    Aca

  • [autoit]

    ; Test #1
    MsgBox(64, "Test #1", "Success: " & (Assign("Test", "Hello World!") = 1) & @CRLF & Eval("Test"))

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

    ; Test #2
    MsgBox(64, "Test #2", $Test)

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

    ; Test #3
    ; [Heute, 16:32] Acanis: Naja, mit Eval gehts... Nur strange, dass man die dann nur mit Eval abrufen kann, wenn die assigned sind...
    $Test3 = "Hello World!"
    MsgBox(64, "Test #3", Eval("Test3"))

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

    Exit

    [/autoit]


    Wenn du in "Au3Check" auf "Continue anyway" klickst, geht sogar "Test #2". ;)

    MfG, James