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
Diese soll mir den Variablennamen $Var als Text zurückgeben...
Fragende Grüsse ![]()
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
Diese soll mir den Variablennamen $Var als Text zurückgeben...
Fragende Grüsse ![]()
Es ist meines Wissens nicht möglich und auch unlogisch. Was sollte denn hierbei sein:
[autoit]Func Foo(ByRef $b)
; showVariableName
EndFunc
$a=0
Foo($a)
Sollte in der Funktion Foo der Varialenname $a sein oder $b?
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.
; 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\'); "
; ...
; 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)
; 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
; 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
return 0 ; Falls kein Eintrag gefunden wurde
Endfunc
Func _Var2Txt($_Var)
; Hier den Variablennamen zu Text umwandeln und zurückgeben
return $s_Return
Endfunc
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])
Func _GettingData(Const $_Txt)
ConsoleWrite($_Txt & @CRLF)
EndFunc
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!