Array Wert als Variablenname verwenden und beschreiben Topic is solved

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

Wick3d
Posts: 31
Joined: 04 Apr 2014, 03:24

Array Wert als Variablenname verwenden und beschreiben

Post by Wick3d » 17 Oct 2020, 09:14

Hallo,

ich habe ein Problem eine Variable neu zu definieren, welche den Namen im Array vordefiniert hat.

Situation (Aufgabenstellung)
Ich habe ein Fenster mit Feldern und gefüllten Edit-Feldern. Diese Felder kann ich nicht direkt ansprechen und muss sie daher "durchtaben".
Das Feld soll dazu abgefragt werden, ob "es Wert ist auszulesen", dann in das Edit-Feld daneben springen und den Inhalt in die passende Variable schreiben.

Funktionsweise
  • Ich "tabbe" mich zum 1. Feld
  • speichere den Inhalt in die Zwischenablage
  • schaue, ob diese im Array ist und wenn ja, welche Position
  • in einem 2. Array steht an passender stelle der Name der Variable, in der ein Wert geschrieben werden soll
  • danach geht das Ganze im Loop von vorne los
Der Code

Code: Select all

^q::
GetDk_Benennung := "Wert wurde nicht ersetzt"

arrAlibre := {"01 - Titel:": 1, "03 - Erstellt von:": 2}
arrInsert := [GetDk_Benennung, var2]
varCount := 1
varCountBack := varCount*2

ClipWaitTime := 0.1

Send {Tab 3}    ; 01-Benennung

Loop, %varCount%{

	clipboard = 							; Leert die Zwischenablage
	Send ^c 								; Kopiert den Aktuellen Inhalt
	ClipWait, ClipWaitTime 					; Wartet bis Zwischenablage einen Text enthält
	varFound := clipboard 					; sendet Inhalt aus Zwischenablage an Variable
	varFoundNum := arrAlibre[varFound] 		; ermittelt die Pos. im Array und setzt sie in eine Variable
	if (varFoundNum > 0){ 					; Wenn der Wert größer 0 ist ...
		Send, {Tab} 						; Sende Tab
		clipboard = 						; Zwischenablage leeren
		Send ^c 							; kopiere Inhalt in Zwischenablage
		ClipWait, ClipWaitTime 				; Wartet kurz
		arrInsert[varFoundNum] = clipboard 	; soll die Variable ausdem Array nehmen, sodass diese den Wert aus der Zwischenablage bekommt.
		; Send, {Tab} 						; Sendet erneut Tab
	}
	else{ 									; Wenn der Gesuchte wert nich größer 0 ...
		Send, {Tab 2} 						; überspringe das Feld um zur nächsten Abfrage zu gelangen
	}
}

MsgBox, %GetDk_Benennung% ; dient zur Abfrage, ob die Variable ersetzt wurde.

return
Meiner Meinung liegt das Problem darin, dass die Variable (in dem fall "GetDk_Benennung") nicht richtig bzw. falsch im Code eingesetzt wird, sodass diese nicht überschrieben wird, weil die Bezeichnung aus dem Array stammt.

Ich bitte um Verbesserung und vielleicht eine kurze Erklärung :D

Ihr könnt mir mit Sicherheit schnell helfen.

Freundliche Grüße
Alex

BoBo
Posts: 6564
Joined: 13 May 2014, 17:15

Re: Array Wert als Variablenname verwenden und beschreiben

Post by BoBo » 17 Oct 2020, 13:57

TBH, steige nicht so richtig durch worauf das Ganze hinauslaufen soll ...

Code: Select all

/*
clipboard := "01 - Titel:"									; speichere den Inhalt in die Zwischenablage
arrAlibre := {"01 - Titel:": 1, "03 - Erstellt von:": 2}	; schaue, ob diese im Array ist und wenn ja, welche Position
arrInsert := [GetDk_Benennung, var2]						; in einem 2. Array steht an passender stelle der Name der Variable, in der ein Wert geschrieben werden soll
*/

GetDk_Benennung := "Wert wurde nicht ersetzt"
var2 := "whatever stuff"

clipboard := "01 - Titel:"
arrAlibre := {"01 - Titel:":GetDk_Benennung, "03 - Erstellt von:":var2}

MsgBox % arrAlibre["01 - Titel:"]											; key = "01 - Titel:" | Ausgabe: variable 'GetDk_Benennung' = "Wert wurde nicht ersetzt"  
MsgBox % arrAlibre[clipboard]												; key = "01 - Titel:" | Ausgabe: variable 'GetDk_Benennung' = "Wert wurde nicht ersetzt" 
MsgBox % GetDk_Benennung													; Ausgabe: variable 'GetDk_Benennung' = "Wert wurde nicht ersetzt" 
MsgBox % arrAlibre["01 - Titel:"] := GetDk_Benennung := "ShowWaddyWaddy"	; key = "01 - Titel:" | Änderung: variable 'GetDk_Benennung' = "ShowWaddyWaddy"
MsgBox % GetDk_Benennung													; Ausgabe: geänderte variable 'GetDk_Benennung' = "ShowWaddyWaddy" 
MsgBox % var2																; Ausgabe: variable 'var2' = "whatever stuff"

Wick3d
Posts: 31
Joined: 04 Apr 2014, 03:24

Re: Array Wert als Variablenname verwenden und beschreiben

Post by Wick3d » 17 Oct 2020, 14:27

Danke für deine Antwort, doch es ist noch nicht dabei, was ich brauch. Obwohl ich schon gelernt habe, dass die Objektnamen nicht zwingend nummerisch sein müssen und somit meinen Code um ein Array abkürzen kann :D

Um bei deinem verkürzten Beispiel zu bleiben, benötige ich Folgendes:

Code: Select all

GetDk_Benennung := "Wert wurde nicht ersetzt"
var2 := "whatever stuff"

clipboard := "01 - Titel:"
arrAlibre := {"01 - Titel:":GetDk_Benennung, "03 - Erstellt von:":var2}

MsgBox % GetDk_Benennung				; variable 'GetDk_Benennung' = "Wert wurde nicht ersetzt" 
arrAlibre[clipboard] := "ShowWaddyWaddy"	; key = "01 - Titel:" | variable 'GetDk_Benennung' = "ShowWaddyWaddy"
MsgBox % GetDk_Benennung				; variable 'GetDk_Benennung' = "ShowWaddyWaddy" 
Er soll hier bereits von selbst merken, dass ich den Wert der Variable GetDk_Benennung (Wie in arrAlibre angegeben und von arrAlibre[clipboard] gefunden) mit dem Wert "ShowWaddyWaddy" ersetzen möchte, ohne es explizit zu erwähnen.

Also laut meinem Wunschdenken sollte er automatisch anstatt arrAlibre[clipboard] := "ShowWaddyWaddy" das hier nehmen: GetDk_Benennung := "ShowWaddyWaddy"

Ich denke nun sollte eindeutig sein, worauf ich hinaus möchte :D

just me
Posts: 9458
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Array Wert als Variablenname verwenden und beschreiben

Post by just me » 18 Oct 2020, 04:27

Moin,

Code: Select all

arrAlibre := {"01 - Titel:":GetDk_Benennung, "03 - Erstellt von:":var2}
Wenn Du Variablennamen als Werte in ein Array stellen wilst, musst Du die als Zeichenketten (Strings) kennzeichnen:

Code: Select all

arrAlibre := {"01 - Titel:": "GetDk_Benennung", "03 - Erstellt von:": "var2"}
Ansonsten wird der Inhalt der Variaben in das Array übernommen.

Wenn Du die Variablen dann beschreiben willst, geht das z.B. so:

Code: Select all

GetDk_Benennung := "Wert wurde nicht ersetzt"
var2 := "whatever stuff"

clipboard := "01 - Titel:"
arrAlibre := {"01 - Titel:":"GetDk_Benennung", "03 - Erstellt von:":"var2"}

MsgBox % GetDk_Benennung				; variable 'GetDk_Benennung' = "Wert wurde nicht ersetzt"
Var := arrAlibre[clipboard]
arrAlibre[clipboard] := "ShowWaddyWaddy"	; key = "01 - Titel:" | variable 'GetDk_Benennung' = "ShowWaddyWaddy"
MsgBox % GetDk_Benennung				; variable 'GetDk_Benennung' = "ShowWaddyWaddy"
Wozu brauchst Du die Variabe?

Wick3d
Posts: 31
Joined: 04 Apr 2014, 03:24

Re: Array Wert als Variablenname verwenden und beschreiben

Post by Wick3d » 18 Oct 2020, 05:00

Das funktioniert auch noch nicht wie gewünscht. Die Variable in der MsgBox wird nicht geändert.

Was ich damit vorhabe bzw. der Ablauf:
  • Ein Feld abfragen ob dessen Inhalt vorhanden ist "01 - Titel:"
  • Wenn ja: Dann den Variablennamen GetDk_Benennung, der im Array hinterlegt ist mit einem neuen Wert überschreiben z.B. ShowWaddyWaddy
Also nichts anderes also den hinterlegten Variablenname einzusetzen, sodass dessen Wert überschrieben werden kann. (wie in meinem 2. Post)

PS: natürlich könnte ich das auch mit If-Abfragen lösen, doch ich möchte meinen Code klein halten, zumal noch mehr Positionen zum Array kommen.

just me
Posts: 9458
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Array Wert als Variablenname verwenden und beschreiben

Post by just me » 18 Oct 2020, 05:13

Mein Fehler, tausche mal

Code: Select all

arrAlibre[clipboard] := "ShowWaddyWaddy"	; key = "01 - Titel:" | variable 'GetDk_Benennung' = "ShowWaddyWaddy"
gegen

Code: Select all

%Var% := "ShowWaddyWaddy"	; variable 'GetDk_Benennung' = "ShowWaddyWaddy"
(Ich hätte geschworen, dass ich das auch so eingestellt habe!)

Wick3d
Posts: 31
Joined: 04 Apr 2014, 03:24

Re: Array Wert als Variablenname verwenden und beschreiben  Topic is solved

Post by Wick3d » 18 Oct 2020, 10:01

Yeah es klappt! :dance:
Ich könnte schwören, ich habe es zuvor schon versucht eine Variable mit dem Element aus dem Array zu füllen, um den Namen zu erhalten. Nur ich habe wohl die nicht als Strings gesetzt.

Klasse nun kann es weitergehen. Danke.

Hier der funktionierende Code (für die Nachwelt :D )

Code: Select all

GetDk_Benennung := "Wert wurde nicht ersetzt"
var2 := "whatever stuff"

clipboard := "01 - Titel:"
arrAlibre := {"01 - Titel:":"GetDk_Benennung", "03 - Erstellt von:":"var2"}

MsgBox % GetDk_Benennung				; variable 'GetDk_Benennung' = "Wert wurde nicht ersetzt"
Var := arrAlibre[clipboard]				; schreibt den Variablenname (GetDk_Benennung) in die Variable <Var>
%Var% := "ShowWaddyWaddy"				; variable 'GetDk_Benennung' = "ShowWaddyWaddy"
MsgBox % GetDk_Benennung				; gibt "ShowWaddyWaddy" aus

Wick3d
Posts: 31
Joined: 04 Apr 2014, 03:24

Re: Array Wert als Variablenname verwenden und beschreiben

Post by Wick3d » 19 Oct 2020, 07:48

Hier noch ein kleiner Bonus von mir:

Da ich den Inhalt der Variable über einen "Send Befehl" ausgeben muss, musste ich den Inhalt der Variable erneut in eine Andere Variable "zwischenspeichern"

Da ich das alles in einem späteren Loop verwende, macht das alles Sinn, auch wenn es auf den ersten Blick nicht aussieht :D

Code: Select all

^q::	

Gui Add, Text, w250 h20, Variable "GetDk_Benennung = `ShowWaddyWaddy`"
Gui Add, Button, gSenden w250 h25, Senden mit <Send>
Gui Add, Edit, vEdit1 w250 h25 Center, 
Gui Show, , Testlabor - Send VarName von Array
Return

Senden:
GetDk_Benennung := "ShowWaddyWaddy"
var2 := "whatever stuff"

clipboard := "01 - Titel:"
arrAlibre := {"01 - Titel:":"GetDk_Benennung", "03 - Erstellt von:":"var2"}

GuiControl Focus, Edit1 	; setzt Fokus auf Edit-Feld
Var := arrAlibre[Clipboard]	; schreibt gefundenen VarName = GetDk_Benennung in <Var>
Var2 := %Var% 				; schreibt den Inhalt von GetDk_Benennung in <Var2>
Send, %var2% 				; sendet der Inhalt der Variable GetDk_Benennung => `ShowWaddyWaddy`

Return

just me
Posts: 9458
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Array Wert als Variablenname verwenden und beschreiben

Post by just me » 21 Oct 2020, 04:40

... musste ich den Inhalt der Variable erneut in eine Andere Variable "zwischenspeichern"
Das kannst Du Dir sparen, wenn Du einen Ausdruck erzwingst:

Code: Select all

Var := arrAlibre[Clipboard]   ; schreibt gefundenen VarName = GetDk_Benennung in <Var>
Send, % %var%                 ; sendet der Inhalt der Variable GetDk_Benennung => `ShowWaddyWaddy`

Wick3d
Posts: 31
Joined: 04 Apr 2014, 03:24

Re: Array Wert als Variablenname verwenden und beschreiben

Post by Wick3d » 21 Oct 2020, 09:07

just me wrote:
21 Oct 2020, 04:40
... musste ich den Inhalt der Variable erneut in eine Andere Variable "zwischenspeichern"
Das kannst Du Dir sparen, wenn Du einen Ausdruck erzwingst:

Code: Select all

Var := arrAlibre[Clipboard]   ; schreibt gefundenen VarName = GetDk_Benennung in <Var>
Send, % %var%                 ; sendet der Inhalt der Variable GetDk_Benennung => `ShowWaddyWaddy`
Danke für den Tipp :thumbup:

Post Reply

Return to “Ich brauche Hilfe”