$Var zu "$Var" - Variablenname zu Text?

  • Nabend!

    Kennt jemand eine Funktion die im prinzip gegenteilig zu 'Assign' Arbeitet?

    [autoit]


    dim $Var=0, $Text
    $Text = _Var2Txt($Var) ; $Text = "$Var" und NICHT $Text = 0

    [/autoit]


    Diese soll mir den Variablennamen $Var als Text zurückgeben...

    Fragende Grüsse :D

  • Wie?
    Du trägst direkt in den Quellcode den Variablennamen ein - also musst du diesen ja auch wissen und kannst ihn auch direkt hinschreiben.
    Wenn du solche zu vermeidenden Dinge wie Assign verwendest vergibst du ja explizit einen String für den Variablennamen.
    Also wieder der Name der dir bekannt ist und den du verwenden kannst.
    Du kannst maximal mit Eval() den Wert einer, durch einen String deklarierten, Variable auslesen - aber nicht den Namen - aber den musst du ja schonmal angegeben und verwendet haben weswegen du ihn sowieso weißt.
    Prinzipiell ist es in der Regel schon fragwürdig überhaupt von Assign und Eval Gebrauch machen zu müssen.
    Sag einfach was am Ende herauskommen soll und es wird ganz sicher besser ohne diese Methode machbar sein.

  • Das ging ja mal schnell :)

    Also im prinzip will ich mir eine einfache SQLight Abfrage machen - eine Komfortable.

    Spoiler anzeigen
    [autoit]


    ; So ist die SQLight.db aufgebaut
    $_SQLdata&="" & _; Path Data
    "CREATE TABLE IF NOT EXISTS 'Settings_Path' (" & _
    "'ID','Data'" & _
    ");" & _
    "INSERT INTO 'Settings_Path' VALUES ('$e_Pa_Main', '"&@ScriptDir&"\Data\'); "
    ; ...

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

    ; Da ich mit Arrays Arbeite, habe ich auch mich auch für Enum´s entschieden - ich wollt diese eben quasi 'doppelt' verwenden...
    Enum $e_Pa_Main, $e_Pa_Last
    Global $s_Path[$e_Pa_Last]
    $s_Path[$e_Pa_Main] = _GettingData($e_Pa_Main)

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

    ; Dieses ist jetzt eine Fiktive SQLight Abfrage
    Func _GettingData($_Txt=_Var2Txt($_Var))
    Local $_Section, $_Key
    ; Die Variable Checken
    if StringInStr($_Txt, "e_Pa", 1) then
    $_Section = "Settings_Path"
    $_Key = $_Txt
    endif

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

    ; Fiktives SQL-Gedöns
    dim $hQuery, $aNames, $aRow
    _SQLite_Query(-1, "SELECT * FROM '"&$_Section&"' ORDER BY '"&$_Key&"';", $hQuery)
    While _SQLite_FetchData ($hQuery, $aRow, False, False) = $SQLITE_OK
    if $aRow[0] = $_key then ExitLoop
    WEnd
    _SQLite_QueryFinalize($hQuery)
    if $aRow[0] = $_key then Return $aRow

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

    return 0 ; Falls kein Eintrag gefunden wurde
    Endfunc

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

    Func _Var2Txt($_Var)
    ; Hier den Variablennamen zu Text umwandeln und zurückgeben
    return $s_Return
    Endfunc

    [/autoit]

    Ich hoffe ich konnte es etwas verdeutlichen...
    In dem Beispiel soll mir die Funktion '_Var2Txt' die angegebene Variable als Text zurückgeben (oder weiß ich was hier eben machen kann). Ich wollt mir dadurch das Handling in zusammenspiel von Array´s und SQLight Abfragen erleichtern.

    Grüsse!

  • [autoit]

    $s_Path[$e_Pa_Main] = _GettingData($e_Pa_Main)

    [/autoit]

    Du trägst mit den eigenen Fingern fest und konstant in den Quelltext _GettingData($e_Pa_Main) ein. Was hielt dich hier davon ab stattdessen _GettingData("e_Pa_Main") einzutragen?

    Auch wenn ich keine Ahnung von den SQL-Datenbanken habe und immer noch nicht ganz verstehe wo das Problem wirklich liegt wäre mein einziger Alternativvorschlag in diese Richung (auch wenn ich das irgendwie für Blödsinn halte) folgender:

    [autoit]

    Enum $e_Pa_Main, $e_Pa_Last
    Global $a_Names[2] = ["e_Pa_Main", "e_Pa_Last"]
    Global $s_Path[$e_Pa_Last]
    $s_Path[$e_Pa_Main] = _GettingData($a_Names[$e_Pa_Main])

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

    Func _GettingData(Const $_Txt)
    ConsoleWrite($_Txt & @CRLF)
    EndFunc

    [/autoit]
  • Hallo!
    Eingentlich gibt es ja auch gar kein Problem, ich habe mir ja eine funktionierende SQL-Abfrage gemacht - hatte bloß überlegt wie ich diese eben verbessern könnte. Da hatte ich mich an die Befehle Eval und Assign erinnert und fragte mich ob dieses auch in die andere Richtung möglich währe ;) Und den Spoiler da unten hatte ich ja auch nur schnell dahergetippt - ist kein keil von meinem Programm oder so.

    Falls doch noch jemand was dazu einfällt, einfach Schreiben!

    Grüsse!