Ahnunglosigkeit ...
Moderator: jNizM
Ahnunglosigkeit ...
... macht sich breit, zwischen meinen Schläfen.
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
Danke fürs Lesen
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
Danke fürs Lesen
Re: Ahnunglosigkeit ...
Mit for, würde ich sagen:
Oder verstehe ich die Frage falsch?
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
Re: Ahnunglosigkeit ...
Hallo,
versuch mal:
versuch mal:
Code: Select all
array := {aaa:"bbbbbbbbbb",ccc:"1234567890",bbb:"xxxxxxx"}
For key, value in array
MsgBox %key% = %value%
Re: Ahnunglosigkeit ...
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
Re: Ahnunglosigkeit ...
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
Danke
Manchmal komm ich mir vor wie ein Einbeiniger beim Arschtritt-contest
Danke
Re: Ahnunglosigkeit ...
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?
Oder anders gefragt, wenn ich nun eine andere Sortierung brauche, wie ginge das?
Re: Ahnunglosigkeit ...
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.
Re: Ahnunglosigkeit ...
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.effel wrote: ↑10 Jul 2020, 10:56Darf 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
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
Re: Ahnunglosigkeit ...
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 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.
Re: Ahnunglosigkeit ...
eine andere Sortierung?
Versuch mal:
Versuch mal:
Code: Select all
array := {aaa:"bbbbbbbbbb",ccc:"1234567890",bbb:"xxxxxxx"}
For key, value in array
MsgBox %key% = %value%
Re: Ahnunglosigkeit ...
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
Re: Ahnunglosigkeit ...
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..
https://www.autohotkey.com/boards/viewtopic.php?f=7&t=7199
Ist aber für mich nicht verständlich..
Re: Ahnunglosigkeit ...
Das habe ich im nachhinein auch just-me's statement entnommen ...
Als laie wundert man/frau sich. Da pustet man werte unsortiert ins array. Denkt die liegen dann dort in genau dieser (un)sortierung."In AHK 1.1 werden sowohl numerische als auch nicht numerische Schlüssel immer automatisch aufsteigend sortiert"
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
Re: Ahnunglosigkeit ...
@BoBo
Und was passiert hier?
Das Leben wird vorwärts gelebt und rückwärts verstanden.
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
Re: Ahnunglosigkeit ...
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.
Re: Ahnunglosigkeit ...
@Frosti Mit ner Bild-Zeitung-Überschrift ist der Leserpool eben gleich viel größer als mit einer fürs Spektrum der Wissenschaft
Und dann gibts da ja auch noch den Dunning-Kruger-Effekt ...
Und dann gibts da ja auch noch den Dunning-Kruger-Effekt ...
Re: Ahnunglosigkeit ...
Hi Rohwedder,
hab das erst jetzt richtig gelesen. Tatsächlich wird das array rückwärts ausgegeben. Aber dann so etwas:
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?
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
*/
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?
Re: Ahnunglosigkeit ...
Es ist alles richtig und Autohotkey keinen Fehler. In meinem Kode ist nur etwas versteckt.
Re: Ahnunglosigkeit ...
Ich habs gefunden: Irgendein unsichtbares Zeichen vor dem aaa und bbb. Da hast du mich aber ganz schön geärgert.
Re: Ahnunglosigkeit ...
Ja: Unsichtbare Zeichen.
Ich nenne das 'Irreführung', weil rückwärts tatsächlich vorwärts entspricht.
Nichts für Ungut!
Ich nenne das 'Irreführung', weil rückwärts tatsächlich vorwärts entspricht.
Nichts für Ungut!