Page 1 of 1

gegeben: Name eines Arrayelements als Text, gesucht: sein Wert

Posted: 07 May 2019, 08:37
by Rohwedder
Hallo,
beim PseudoArray funktionierts. Wie gehts beim Array?

Code: Select all

q:: ;PseudoArray: funktioniert!
b := 2, Var%b% := 7
Text := "Var%b%" ;dieser Text soll aufgelöst werden
Transform, Element, Deref,% Text ;Ergebnis: Var2
Wert := %Element% ;Ergebnis: 7
MsgBox,, PseudoArray,% "Text:`t" Text "`nElement:`t" Element "`nWert:`t" Wert
Return

w:: ;Array: ??? 
Var := {} 
b := 2, Var[b] := 7
Text := "Var[b]" ;dieser Text soll aufgelöst werden
Element := "???" ;Ergebnis: Var[2]
Wert :=	"???" ;Ergebnis: 7
MsgBox,, Array,% "Text:`t" Text "`nElement:`t" Element "`nWert:`t" Wert
Return

Re: gegeben: Name eines Arrayelements als Text, gesucht: sein Wert

Posted: 07 May 2019, 09:25
by nnnik
Da bleibt dir nichts anderes übrig als einen Parser zu schreiben.

Re: gegeben: Name eines Arrayelements als Text, gesucht: sein Wert

Posted: 07 May 2019, 09:36
by Kobaltauge
Hallo.
Du hast mir jetzt so oft geholfen, ich würde mich gerne revanchieren. Jedoch greife ich dein Problem nicht ganz.
Ich habe deinen Code so ausgefüllt. Willst du mit der "Text" variable nur anzeigen wie die aussehen soll? Dann würde ich ein wenig schummeln und den String zusammenbauen.

Ich hoffe, das hilft.

Code: Select all

w:: ;Array: ??? 
Var := {} 
b := 2, Var[b] := 7
Text := "Var[" . b . "]" ;dieser Text soll aufgelöst werden
Element := "Var[b]" ;Ergebnis: Var[2]
Wert := Var[b] ;Ergebnis: 7
MsgBox,, Array,% "Text:`t" Text "`nElement:`t" Element "`nWert:`t" Wert
Return
2019-05-07 16_28_27-AHK Studio - _C__Daten_Programmier_autohotkey_AHK-Studio-master_Untitled_Untitle.png
2019-05-07 16_28_27-AHK Studio - _C__Daten_Programmier_autohotkey_AHK-Studio-master_Untitled_Untitle.png (11.26 KiB) Viewed 669 times

Re: gegeben: Name eines Arrayelements als Text, gesucht: sein Wert

Posted: 07 May 2019, 10:16
by Rohwedder
Hallo,
Schummeln hilft mir leider hier nicht viel weiter.
Hintergrund: Zum Debuggen meiner Skripte verwende ich einen ToolTip-Einzeiler um zur Laufzeit Variableninhalte prüfen zu können.
Diese ToolTipzeilen verbleiben später auskommentiert im Skript, so daß ich sie bei Problemen wieder reaktivieren kann.
Ich weiß dann auch gleich wieder welche Variablen früher wichtig waren.
A_LineNumber ist übrigens hilfreich, falls ich die Auskommentierung vergessen oder absichtlich unterlassen habe.
Nun möchte ich das zugehörige ToolTip(Vars,Line:=False) auf Arrays und Objekte erweitern.

Code: Select all

q::
Var1 := 4, Var2 := 7, Var3 := 9
a := 1, b := 2
ToolTip("Var%a%,Var%b%,Var3",A_LineNumber)
Return

ToolTip(Vars,Line:=False)
{
    Local Text = "", Value
    Loop, Parse, Vars, CSV, %A_Space%%A_Tab%
    {
        IF !InStr(A_LoopField, "%")
            Text .= A_LoopField ": " %A_LoopField% "`n"
        Else
        {
            Transform, Value, Deref, %A_LoopField%
            Text .= A_LoopField ": " Value ": " %Value% "`n"
        }
    }
    ToolTip,% Text (Line?"Line: " Line:"")
}

Re: gegeben: Name eines Arrayelements als Text, gesucht: sein Wert

Posted: 07 May 2019, 11:56
by Rohwedder
Hallo,
funktioniert:

Code: Select all

w:: ;Array: funktioniert
Var := {} 
b := 2, Var[b] := 7
Text := "Var[b]" ;dieser Text soll aufgelöst werden
RegexMatch(Text, "(.*)\[(.*)\]", M)
Element := M1 "[" %M2% "]" ;Ergebnis: Var[2]
Wert := %M1%[%M2%] ;Ergebnis: 7
MsgBox,, Array,% "Text:`t" Text "`nElement:`t" Element "`nWert:`t" Wert
Return

Re: gegeben: Name eines Arrayelements als Text, gesucht: sein Wert

Posted: 08 May 2019, 01:41
by nnnik
Du brauchst die %% nie in die [] Klammern zu packen.
Wenn du als RegexMatch: .*?\[.*?\] verwendest sollte es selbst dann noch funktionieren wenn du mehrere von den Arrays in einem string hast. (was du wie ich grade sehe nicht brauchst)
BTW Wie zeigst du dir damit die Inhalte von Funktionen an?

Re: gegeben: Name eines Arrayelements als Text, gesucht: sein Wert

Posted: 08 May 2019, 03:28
by just me
nnnik wrote:Du brauchst die %% nie in die [] Klammern zu packen.


Moin,
wie meinst Du das?
Z.B.

Code: Select all

Wert := %M1%[%M2%] ;Ergebnis: 7
M2 enthält b, %M1%[M2] würde deshalb zu Var[ b ] aufgelöst und kein Ergebnis liefern.

Re: gegeben: Name eines Arrayelements als Text, gesucht: sein Wert

Posted: 08 May 2019, 03:54
by nnnik
Stimmt tatsächlich.