Überführung von LV-Content in Array zur Sortierung

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

BNOLI
Posts: 548
Joined: 23 Mar 2020, 03:55

Überführung von LV-Content in Array zur Sortierung

Post by BNOLI » 28 May 2020, 03:14

Moin Leutlings,
ausgehend von folgendem Thread :arrow: ListView / LV_ModifyCol() - Sorting order, stellte sich mir die Frage wie es möglich ist, die Inhalte von Array's zu parsen, um als Ergebnis eine (nach Vorabkriterium) sortierte Ausgabe zu erhalten?

(M)eine naive Vorstellung, ähnlich dem Inhalt einer (LV-)Tabelle, je Reihe/row einen array zu generieren, deren items (gemäß Beispielzeile(n) aus dem besagten thread) ...

17 may 2020 (43968)
10 december 2017 (43079)
7 april 2016 (42467)
2 january 2018 (43102)


... wie folgt gereiht werden.

Code: Select all

arrayn := ["item1","Item2","item3","item4","item5"]
array1 := ["17 may 2020 (43968)","17", "may", "2020", "(43968)"]
array2 := ["10 december 2017 (43079)","10","december","2017","(43079)"]
array3 := ["7 april 2016 (42467)","7","april","2016","(42467)"]
array4 := ["2 january 2018 (43102)","2","january","2018","(43102)"]
... angedacht ist, die Ausgabe der Reihen in sortierter Reihenfolge, ausgehend vom Inhalt einer array-übergreifenden definierten 'Spalte' z.B. nach item5.
Hier wären also geklammerte Zahlenwerte zu sortieren, und als Ergebnis die jeweiligen Reihen (beinhaltet in item1) auszugeben.

Anstatt aber jetzt mit 30 Zeilen Unsinn hier aufzuschlagen, wäre mir zuerst an Vorschlägen gelegen wie sowas pseudocode'ish aussehen könnte/sollte.
Ich vermute mal das arrays mit subarrays einfacher zu handeln wären, da wirds mir aber schon ebbes kryptisch (heisst, die Darreichung von Beispielcode(zeilen) wäre nicht ausdrücklich untersagt) :P. Dies soweit zur Zielsetzung. Nun fängt es jedoch damit an, das die Fütterung von (whatever-kind-of) arrays aus einem LV mir derzeit bereits Rätsel aufgibt :?

Und btw, zur Sortierung von/aus arrays in besagter Form habe ich (für mich) nichts wirklich verwert-/begreifbares gefunden. Wer dazu allerdings Quellen kennt ... bin da ganz Zweiohrig :thumbup:
Remember to use [code]CODE[/code]-tags for your multi-line scripts. Stay safe, stay inside, and remember washing your hands for 20 sec !
User avatar
haichen
Posts: 631
Joined: 09 Feb 2014, 08:24

Re: Überführung von LV-Content in Array zur Sortierung

Post by haichen » 28 May 2020, 03:51

Diese letzten beiden Beiträge von Gurkentoepfer und just me klingen ganz gut von der Idee.
https://www.autohotkey.com/boards/viewtopic.php?p=39063#p39063
BNOLI
Posts: 548
Joined: 23 Mar 2020, 03:55

Re: Überführung von LV-Content in Array zur Sortierung

Post by BNOLI » 28 May 2020, 04:21

haichen wrote:
28 May 2020, 03:51
Diese letzten beiden Beiträge von Gurkentoepfer und just me klingen ganz gut von der Idee.
https://www.autohotkey.com/boards/viewtopic.php?p=39063#p39063
Das kommt davon wenn man nach Englischen Begriffen sucht, da fallen dann die Beiträge im Deutschen Forum unter den Tisch :oops:
Danke für den link :thumbup: , ... irgendwie schwante mir schon, das sowas wie ein 'nested loop' droht :lol:
Remember to use [code]CODE[/code]-tags for your multi-line scripts. Stay safe, stay inside, and remember washing your hands for 20 sec !
User avatar
haichen
Posts: 631
Joined: 09 Feb 2014, 08:24

Re: Überführung von LV-Content in Array zur Sortierung

Post by haichen » 28 May 2020, 06:47

Hier mal eine "einfache" SortArray() Funktion:

Code: Select all

TestArray:=[]
TestArray[1,1]:="Nr"
TestArray[1,2]:="Name"
TestArray[1,3]:="PLZ"
TestArray[1,4]:="Straße"
TestArray[2,1]:=1
TestArray[2,2]:="Müller"
TestArray[2,3]:=90547
TestArray[2,4]:="Hubertusring"
TestArray[3,1]:=2
TestArray[3,2]:="Schmidt"
TestArray[3,3]:=31852
TestArray[3,4]:="Steigenberger Str"
TestArray[4,1]:=3
TestArray[4,2]:="Huber"
TestArray[4,3]:=91522
TestArray[4,4]:="Wilhelm-Busch-Str"
TestArray[5,1]:=4
TestArray[5,2]:="Meier"
TestArray[5,3]:=23552
TestArray[5,4]:="Marzipanstraße"
TestArray[6,1]:=5
TestArray[6,2]:="Meyer"
TestArray[6,3]:=31811
TestArray[6,4]:="Birkenweg"


d:=sortTable(TestArray, 2, 1, "r")

msgbox, % showTable(TestArray) "`n`n" showTable(d)


return

sortTable(array ,Column, Header:=0, SortMethod:=""){
	h:=[]
	aNew:=[]
    
    MinIndex := array.MinIndex()
 	
	Columnscount:=Array[MinIndex].maxindex()

	trenner:="|" ; darf nicht im Array vorkommen
	
	if (header){
		h[1]:=array[MinIndex]
		array.Delete(MinIndex)
	}
	
	for key,row in array
		data .= row[Column] trenner key "`n"
	
	sort data,  % SortMethod
	
	Loop, parse, data, `n, `r
	{
		r:=a_index
		t := StrSplit(a_loopfield , trenner)
		loop, % Columnscount
			aNew[r,a_index]:=array[t[2],a_index]
		aNew[r,Column]:=t[1]
	}
	
	MinIndex2 := aNew.MinIndex()
	aNew.InsertAt(MinIndex2,h[1])
	array.InsertAt(MinIndex,h[1])
	
	return aNew
}

showTable(array){
	data:=""
	for key,row in array
	{
		for k, column in row
			data .=   column " "
		data.= "`n"
	}
	return data
}
Edit: Das Skript funktioniert jetzt auch mit einem 0-based Array
Edit2: Array-Index der Zeile kann jetzt bei einer beliebigen positiven Zahl anfangen
Post Reply

Return to “Ich brauche Hilfe”