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

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

Rohwedder
Posts: 7612
Joined: 04 Jun 2014, 08:33
Location: Germany

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

07 May 2019, 08:37

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
User avatar
nnnik
Posts: 4500
Joined: 30 Sep 2013, 01:01
Location: Germany

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

07 May 2019, 09:25

Da bleibt dir nichts anderes übrig als einen Parser zu schreiben.
Recommends AHK Studio
Kobaltauge
Posts: 264
Joined: 09 Mar 2019, 01:52
Location: Germany
Contact:

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

07 May 2019, 09:36

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 1707 times
Rohwedder
Posts: 7612
Joined: 04 Jun 2014, 08:33
Location: Germany

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

07 May 2019, 10:16

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:"")
}
Rohwedder
Posts: 7612
Joined: 04 Jun 2014, 08:33
Location: Germany

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

07 May 2019, 11:56

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
User avatar
nnnik
Posts: 4500
Joined: 30 Sep 2013, 01:01
Location: Germany

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

08 May 2019, 01:41

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?
Recommends AHK Studio
just me
Posts: 9442
Joined: 02 Oct 2013, 08:51
Location: Germany

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

08 May 2019, 03:28

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.
User avatar
nnnik
Posts: 4500
Joined: 30 Sep 2013, 01:01
Location: Germany

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

08 May 2019, 03:54

Stimmt tatsächlich.
Recommends AHK Studio

Return to “Ich brauche Hilfe”

Who is online

Users browsing this forum: No registered users and 15 guests