Ahnunglosigkeit ...

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

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

Ahnunglosigkeit ...

Post by BoBo » 10 Jul 2020, 08:24

... macht sich breit, zwischen meinen Schläfen. :crazy:

Folgende Konstellation:

aaa
bbbbbbbbbb
ccc
1234567890
bbb
xxxxxxx


Möchte jetzt dieses in ein assoziatives array überführen ...
array := {"aaa":"bbbbbbbbbb","ccc":"1234567890","bbb":"xxxxxxx"}
anschließend soll nach keys alphabetisch sortiert werden ...
so, das die finale ausgabe (nicht zwingend das array) wie folgt aussieht:

aaa
bbbbbbbbbb
bbb
xxxxxxx
ccc
1234567890


Die eigentliche frage, wie ermittle ich die keys eines ass. arrays im nachhinein (ungeachtet ob es sinnvollere möglichkeiten im voraus gibt)??
Vermutlich die offensichtlichste methode der welt, doch ich bekomme aus der AHK hilfe für mich nichts nachvollziehbares extrahiert :x

Danke fürs Lesen :)

gregster
Posts: 9020
Joined: 30 Sep 2013, 06:48

Re: Ahnunglosigkeit ...

Post by gregster » 10 Jul 2020, 08:45

Mit for, würde ich sagen:

Code: Select all

array := {"aaa":"bbbbbbbbbb","ccc":"1234567890","bbb":"xxxxxxx"}

for key, value in array
	msgbox % "Key: " key "  Value: " value

for key, value in array
	str .= key "`n" value "`n"	
msgbox % str
Oder verstehe ich die Frage falsch?

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

Re: Ahnunglosigkeit ...

Post by Rohwedder » 10 Jul 2020, 08:47

Hallo,
versuch mal:

Code: Select all

array := {aaa:"bbbbbbbbbb",ccc:"1234567890",bbb:"xxxxxxx"}
For key, value in array
	MsgBox %key% = %value%

gregster
Posts: 9020
Joined: 30 Sep 2013, 06:48

Re: Ahnunglosigkeit ...

Post by gregster » 10 Jul 2020, 08:52

Oder:

Code: Select all

array := {"aaa":"bbbbbbbbbb","ccc":"1234567890","bbb":"xxxxxxx"}

enum := array._NewEnum()
While enum[k, v]
    str .= k "`n" v "`n"
MsgBox % str

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

Re: Ahnunglosigkeit ...

Post by BoBo » 10 Jul 2020, 08:53

Ich hatte tatsächlich mit For ... in angefangen, und aus geistiger Umnachtung auf Loop gewechselt.
Manchmal komm ich mir vor wie ein Einbeiniger beim Arschtritt-contest :crazy: :lolno: :shifty:

Danke :)

effel
Posts: 546
Joined: 16 Jan 2018, 13:34

Re: Ahnunglosigkeit ...

Post by effel » 10 Jul 2020, 10:56

Darf ich fragen, warum die Ausgabe jetzt eine andere Sortierung hat? welche Zeile ist für die Sortierung zuständig?

Oder anders gefragt, wenn ich nun eine andere Sortierung brauche, wie ginge das?

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

Re: Ahnunglosigkeit ...

Post by just me » 10 Jul 2020, 15:49

In AHK 1.1 werden sowohl numerische als auch nicht numerische Schlüssel immer automatisch aufsteigend sortiert. Numerische Schlüssel in lückenlosen 'simple arrays' lassen sich auch mit der Loop Anweisung abgreifen. Generell ist aber bei assoziativen Arrays For das Mittel der Wahl.

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

Re: Ahnunglosigkeit ...

Post by BoBo » 10 Jul 2020, 16:20

effel wrote:
10 Jul 2020, 10:56
Darf ich fragen, warum die Ausgabe jetzt eine andere Sortierung hat? Hier wurde lediglich das Ziel skizziert.
Welche Zeile ist für die Sortierung zuständig? Noch keine, s.o.

Oder anders gefragt, wenn ich nun eine andere Sortierung brauche, wie ginge das? Ich verwend(et)e AHK's Sort-Befehl
Hier noch (m)eine Lösung mit einer vorab-Sortierung der keys, zeitgleich zur Befüllung des arrays, und nachfolgender Abfrage des arrays zur Ausgabe.

Code: Select all

content =
	(LTrim
	blue
	|<>*43$17.5VUHl07W14J27p2iGeQUXIo1hs0oU0V023U
	green
	|<>*47$8.400026Vy+mVCpzeGM+0ks62
	red
	|<>*53$11.0EUF020U7dAN902E3gX80QNe40W001kE
	yellow
	|<>*48$17.0/U8K3k43EU2+eABg09Y1dA0a817k1JU0UU
	gray
	|<>*51$17.00U0B00U01A0UMK0UMlU+XVgn14628I20I45o60U43A
	white
	|<>*134$17.zjzzzwzzbzxhTxyzzzzz1y6STA
	black
	|<>*134$17.zjzzzwzzbzxhTxyzzzzz1y6STA
	)

newContent := "", keys := "", array := {}									; vars & an empty associative array/variablen- & array-deklaration
Loop, Parse, content, `r`n													; parse content for the number of lines/für die anzahl an keys ...
	{	Mod(A_Index,2)!=0 ? (key := A_LoopField, keys .= A_LoopField "`n")	; keep 'keynames' and concatenate them for sorting/erstelle unsortierte 'key'-liste
	:	Mod(A_Index,2) =0 ? (array[key] := A_LoopField)						; add 'key and item/value' to assoc. array/befüllung des array mit 'key+werte'-paaren
	:	""																	; ...
	}
Sort, keys																	; well, sorting the keys/sortierung der 'key'-liste
Loop, Parse, keys, `n														; parse for the number of sorted keys/für die anzahl an keys ...
	newContent .= A_LoopField "`n" array[A_LoopField] "`n"					; concatenate the sorted content/erstelle sortierte 'key'-liste
MsgBox % newContent															; ShowTime/Anzeige
Return

User avatar
haichen
Posts: 631
Joined: 09 Feb 2014, 08:24

Re: Ahnunglosigkeit ...

Post by haichen » 11 Jul 2020, 04:17

Hi BoBo,
das Array ist schon so sortiert, wie du es mit deinem sort, keys erhälst.
Das ist wohl die Standardsortierung des assoz. Arrays.
Aber wenn man eine andere Sortierung will, z.B. sort, keys, r , dann wird es interessant.

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

Re: Ahnunglosigkeit ...

Post by Rohwedder » 11 Jul 2020, 04:40

eine andere Sortierung?
Versuch mal:

Code: Select all

array := {aaa:"bbbbbbbbbb",ccc:"1234567890",​bbb:"xxxxxxx"}
For key, value in array
	MsgBox %key% = %value%

gregster
Posts: 9020
Joined: 30 Sep 2013, 06:48

Re: Ahnunglosigkeit ...

Post by gregster » 11 Jul 2020, 04:46

Beim Dictionary COM-Objekt kann man die Reihenfolge beibehalten, in der die Keys erstellt wurden: https://www.autohotkey.com/boards/viewtopic.php?f=6&t=77#p396

User avatar
haichen
Posts: 631
Joined: 09 Feb 2014, 08:24

Re: Ahnunglosigkeit ...

Post by haichen » 11 Jul 2020, 06:02

Ich meine, dass man sich auch eine eigene .enum() basteln kann.
https://www.autohotkey.com/boards/viewtopic.php?f=7&t=7199
Ist aber für mich nicht verständlich..

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

Re: Ahnunglosigkeit ...

Post by BoBo » 11 Jul 2020, 08:35

haichen wrote:
11 Jul 2020, 04:17
Hi BoBo,
das Array ist schon so sortiert, wie du es mit deinem sort, keys erhälst.
Das ist wohl die Standardsortierung des assoz. Arrays.
Aber wenn man eine andere Sortierung will, z.B. sort, keys, r , dann wird es interessant.
Das habe ich im nachhinein auch just-me's statement entnommen ...
"In AHK 1.1 werden sowohl numerische als auch nicht numerische Schlüssel immer automatisch aufsteigend sortiert"
Als laie wundert man/frau sich. Da pustet man werte unsortiert ins array. Denkt die liegen dann dort in genau dieser (un)sortierung.
Darauf fängt man/frau an umständlichste sortiermethoden zu verbuxeln. Und am ende reicht mal wieder der in der AHK-hilfe überlesene einzeiler.
Menno :?

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

Re: Ahnunglosigkeit ...

Post by Rohwedder » 11 Jul 2020, 10:57

@BoBo
Und was passiert hier?

Code: Select all

vorwärts := {​​aaa:"bbbbbbbbbb",​bbb:"xxxxxxx",ccc:"1234567890"}
For key, value in vorwärts
	rückwärts .= key "`t" value "`n"
MsgBox,, rückwärts,% rückwärts
Das Leben wird vorwärts gelebt und rückwärts verstanden.

User avatar
Frosti
Posts: 426
Joined: 27 Oct 2017, 14:30
Contact:

Re: Ahnunglosigkeit ...

Post by Frosti » 11 Jul 2020, 14:58

Hey, Bobo Deine Ahnungslosigkeit hat ein massives Interesse erzeugt! 5902 mal wurde dieser Thread in etwas über 24h aufgerufen. Ich wäre der erste mit einer Antwort gewesen, habe es aber lieber gelassen.

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

Re: Ahnunglosigkeit ...

Post by BoBo » 12 Jul 2020, 01:11

@Frosti Mit ner Bild-Zeitung-Überschrift ist der Leserpool eben gleich viel größer als mit einer fürs :arrow: Spektrum der Wissenschaft :mrgreen:
Und dann gibts da ja auch noch den Dunning-Kruger-Effekt :lol: ...

User avatar
haichen
Posts: 631
Joined: 09 Feb 2014, 08:24

Re: Ahnunglosigkeit ...

Post by haichen » 12 Jul 2020, 02:52

Hi Rohwedder,
hab das erst jetzt richtig gelesen. Tatsächlich wird das array rückwärts ausgegeben. Aber dann so etwas:

Code: Select all


vorwaerts := {​​aaa:"bbbbbbbbbb",​bbb:"xxxxxxx",ccc:"c1234567890"}
For key, value in vorwaerts
	rueckwaerts .= key "=" value "`n"

MsgBox,, rueckwaerts,% "For-loop:`n" rueckwaerts "`nEinzelwerte:`nvorwaerts[aaa]: " vorwaerts[aaa] "`nvorwaerts[''aaa'']: " vorwaerts["aaa"] "`nvorwaerts.aaa: " vorwaerts.aaa "`n`nvorwaerts[bbb]: " vorwaerts[bbb] "`nvorwaerts[''bbb'']: " vorwaerts["bbb"] "`nvorwaerts.bbb: " vorwaerts.bbb "`n`nvorwaerts[ccc]: " vorwaerts[ccc] "`nvorwaerts[''ccc'']: " vorwaerts["ccc"] "`nvorwaerts.ccc: " vorwaerts.ccc 
/*
For-loop:
ccc=c1234567890
?bbb=xxxxxxx
??aaa=bbbbbbbbbb

Einzelwerte:
vorwaerts[aaa]: 
vorwaerts[''aaa'']: 
vorwaerts.aaa: 

vorwaerts[bbb]: 
vorwaerts[''bbb'']: 
vorwaerts.bbb: 

vorwaerts[ccc]: 
vorwaerts[''ccc'']: c1234567890
vorwaerts.ccc: c1234567890
*/

array := {"aaa":"bbbbbbbbbb","ccc":"1234567890","bbb":"xxxxxxx"}
MsgBox, % "`nEinzelwerte:`narray[aaa]: " array[aaa] "`narray[''aaa'']: " array["aaa"] "`narray.aaa: " array.aaa "`n`narray[bbb]: " array[bbb] "`narray[''bbb'']: " array["bbb"] "`narray.bbb: " array.bbb "`n`narray[ccc]: " array[ccc] "`narray[''ccc'']: " array["ccc"] "`narray.ccc: " array.ccc 

/* alles wie erwartet
Einzelwerte:
array[aaa]: 
array[''aaa'']: bbbbbbbbbb
array.aaa: bbbbbbbbbb

array[bbb]: 
array[''bbb'']: xxxxxxx
array.bbb: xxxxxxx

array[ccc]: 
array[''ccc'']: 1234567890
array.ccc: 1234567890
*/
Sehe ich da einen Fehler in Autohotkey oder habe ich etwas übersehen.
Die Hilfe sagt: "Bei der {Key:Value}-Schreibweise muss der Key, sofern dieser nur aus Wortzeichen besteht, nicht in Anführungszeichen gesetzt werden. " Von daher eigentlich alles richtig. Oder?

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

Re: Ahnunglosigkeit ...

Post by Rohwedder » 12 Jul 2020, 03:07

Es ist alles richtig und Autohotkey keinen Fehler. In meinem Kode ist nur etwas versteckt.

User avatar
haichen
Posts: 631
Joined: 09 Feb 2014, 08:24

Re: Ahnunglosigkeit ...

Post by haichen » 12 Jul 2020, 03:26

Ich habs gefunden: Irgendein unsichtbares Zeichen vor dem aaa und bbb. Da hast du mich aber ganz schön geärgert.

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

Re: Ahnunglosigkeit ...

Post by just me » 12 Jul 2020, 03:29

Ja: Unsichtbare Zeichen.

Ich nenne das 'Irreführung', weil rückwärts tatsächlich vorwärts entspricht.

Nichts für Ungut! ;)

Post Reply

Return to “Ich brauche Hilfe”