[GELÖST] Structure Spalte ohne SpaltenNamen übergeben

Also seit gestern weis ich endlich ^^ das mann LinkedLists & Arrays auch als Parameter übergeben kann (hab das warscheinlich irgendwann mal ausprobiert gehabt, bei einer Version nach PB 4.20 und wusste nichts vom List Schlüsselwort, und hab dann bestimmt aufgegeben

Hey schreib ich mir doch endlich eine Prozedure (oder noch besser ein Module, Danke an mk-soft für den Denk anstoss

Naja sehr viel hat es mir nicht gebracht.....bis heute Morgen um 4

Als ich endlich rausgefunden habe das sowas geht
Code: Alles auswählen
SortStructuredList(Animals(),#PB_Sort_Ascending,ColToSort,ColType)

die ich mir nicht merken kann
Code: Alles auswählen
SortStructuredList(Animals(), #PB_Sort_Ascending, OffsetOf(Animal\Name$), TypeOf(Animal\Name$))
Aber das OffsetOf wecklassen, funzt komischerweise nicht immer ! Einmal gibt es einen Speicherfehler, und einmal nicht.
Und das ist nicht mal mein Haupt Problem, ich finde einfach keine Möglichkeit, eine Variable
zu füllen, ohne den expliziten Namen angeben zu müssen.
Siehe Zeile 118 | Da bräuchte ich es das erste mal, daß ich in
blabla_1$
den Inhalt von
InList.stuff()\s0
kriege, ohne dessen Namen direkt anzugeben, sondern die Spalte. (es muss doch einen Weg geben !)
Also muss ich auf die umständliche Methode zurück greifen, daß ich erst mal den Inhalt der
entsprechenden Spalte in der Repeat Schleife in
InList.stuff()\onlyS_for_sort_struc
schreibe, damit ich dann später blabla_1$ damit füllen kann.
Code: Alles auswählen
Structure stuff
s0.s
s1.s
s2.s
s3.s
s4.s
Pos.i
onlyS_for_sort_struc.s
onlyI_for_sort_struc.i
EndStructure
Structure Animal
Name$
Speed.l
EndStructure
Global NewList Temp.stuff()
Global NewList Animals.Animal()
AddElement(Animals())
Animals()\Name$ = "Tiger"
Animals()\Speed = 10
AddElement(Animals())
Animals()\Name$ = "Jaguar"
Animals()\Speed = 40
AddElement(Animals())
Animals()\Name$ = "Zebra"
Animals()\Speed = 30
Procedure DuppeFillStruc(List InList.stuff())
Debug "------FILL STRUC LIST------------------"
ClearList(InList.stuff())
AddElement(InList.stuff())
InList.stuff()\s0 = "AAA0"
InList.stuff()\s1 = "AAA1"
InList.stuff()\s2 = "1"
AddElement(InList.stuff())
InList.stuff()\s0 = "BBB0"
InList.stuff()\s1 = "BBB1"
InList.stuff()\s2 = "2"
AddElement(InList.stuff())
InList.stuff()\s0 = "CCC0"
InList.stuff()\s1 = "CCC1"
InList.stuff()\s2 = "3"
AddElement(InList.stuff())
InList.stuff()\s0 = "CCC0"
InList.stuff()\s1 = "CCC1"
InList.stuff()\s2 = "3"
AddElement(InList.stuff())
InList.stuff()\s0 = "DDD0"
InList.stuff()\s1 = "DDD1"
InList.stuff()\s2 = "4"
ForEach InList.stuff()
Debug InList.stuff()\s0
Debug InList.stuff()\s1
Debug InList.stuff()\s2
Debug "---"
Next
Debug "-----DONE-----"
EndProcedure
Procedure DuppeKillStruc(SortOrder,List InList.stuff(),TypeString,ColToSort)
Debug ""
Debug "------SORT AND REM DUPES-------"
If TypeString
ColType = 8 ; #PB_SORT_STRING BZW #PB_STRING
Else
ColType = 21 ; #PB_SORT_INTEGER BZW #PB_INTEGER
EndIf
tmp_max = ListSize(InList.stuff())
If tmp_max > 1
If TypeString
ForEach InList.stuff()
;[/ REPEATING CRAP
If ColToSort = 0
InList.stuff()\onlyS_for_sort_struc = InList.stuff()\s0
EndIf
If ColToSort = 1
InList.stuff()\onlyS_for_sort_struc = InList.stuff()\s1
EndIf
If ColToSort = 2
InList.stuff()\onlyS_for_sort_struc = InList.stuff()\s2
EndIf
If ColToSort = 3
InList.stuff()\onlyS_for_sort_struc = InList.stuff()\s3
EndIf
If ColToSort = 4
InList.stuff()\onlyS_for_sort_struc = InList.stuff()\s4
EndIf
;]
Next
SortStructuredList(InList(),SortOrder,ColToSort,ColType)
;SortStructuredList(InList(),SortOrder,OffsetOf(stuff\onlyS_for_sort_struc),ColType)
FirstElement(InList.stuff()) : blabla_1$ = InList.stuff()\onlyS_for_sort_struc : len1=Len(blabla_1$)
NextElement(InList.stuff()) : blabla_2$ = InList.stuff()\onlyS_for_sort_struc : len2=Len(blabla_2$)
For tmp_p = 0 To tmp_max -1
If len1=len2
If FindString(blabla_1$,blabla_2$,1) = 1
DeleteElement(InList.stuff())
Debug "DEL => A="+blabla_1$+" B="+blabla_2$
EndIf
EndIf
blabla_1$ = InList.stuff()\onlyS_for_sort_struc : len1=Len(blabla_1$)
If NextElement(InList.stuff()) = 0
Break
EndIf
blabla_2$ = InList.stuff()\onlyS_for_sort_struc : len2=Len(blabla_2$)
Next
Else
ForEach InList.stuff()
;[/ REPEATING CRAP
If ColToSort = 0
InList.stuff()\onlyI_for_sort_struc.i = Val(InList.stuff()\s0)
EndIf
If ColToSort = 1
InList.stuff()\onlyI_for_sort_struc.i = Val(InList.stuff()\s1)
EndIf
If ColToSort = 2
InList.stuff()\onlyI_for_sort_struc.i = Val(InList.stuff()\s2)
EndIf
If ColToSort = 3
InList.stuff()\onlyI_for_sort_struc.i = Val(InList.stuff()\s3)
EndIf
If ColToSort = 4
InList.stuff()\onlyI_for_sort_struc.i = Val(InList.stuff()\s4)
EndIf
;]
Next
SortStructuredList(InList(),SortOrder,ColToSort,ColType)
; SortStructuredList(InList(),SortOrder,OffsetOf(stuff\onlyI_for_sort_struc.i),ColType)
FirstElement(InList.stuff()) : blabla_1 = InList.stuff()\onlyI_for_sort_struc.i
NextElement(InList.stuff()) : blabla_2 = InList.stuff()\onlyI_for_sort_struc.i
For tmp_p = 0 To tmp_max -1
If blabla_1=blabla_2
DeleteElement(InList.stuff())
Debug "DEL => A="+blabla_1+" B="+blabla_2
EndIf
blabla_1 = InList.stuff()\onlyI_for_sort_struc.i
If NextElement(InList.stuff()) = 0
Break
EndIf
blabla_2 = InList.stuff()\onlyI_for_sort_struc.i
Next
EndIf
EndIf
Debug "--DONE--------------"
Debug ""
Debug "--DEBUG--"
ForEach InList.stuff()
Debug InList.stuff()
Debug InList.stuff()\s0
Next
EndProcedure
Procedure SortThisCrap()
ColToSort = 0
If ColToSort = 0
ColType = #PB_String
Else
ColType = #PB_Long
EndIf
Debug "--------------SORT Animal Name----------------------------"
SortStructuredList(Animals(),#PB_Sort_Ascending,ColToSort,ColType)
ForEach Animals()
Debug Animals()\Name$+" - Speed: "+Str(Animals()\Speed)
Next
Debug "---"
ColToSort = 1
If ColToSort = 0
ColType = #PB_String
Else
ColType = #PB_Long
EndIf
Debug "--------------SORT Animal Speed----------------------------"
SortStructuredList(Animals(),#PB_Sort_Ascending,ColToSort,ColType)
ForEach Animals()
Debug Animals()\Name$+" - Speed: "+Str(Animals()\Speed)
Next
EndProcedure
DuppeFillStruc(Temp.stuff())
DuppeKillStruc(#PB_Sort_Ascending,Temp.stuff(),#False,1) ; Geht immer
;DuppeKillStruc(#PB_Sort_Ascending,Temp.stuff(),#True,1) ; Speicherfehler wenn Zeile drüber auskommentiert ist. Wieso ?
; Hier geht es doch ! Egal ob 211 und/oder 212 auskommentiert sind
SortThisCrap()
ps: Ich weis Dank NicTheQuick das mann mit einer Map, viel schneller und speicherschonender Doppelte Einträge killen kann (b.z.w gar nicht erst in die Map aufnehmen) nur hab ich mir verdammt viel Code Schnipsel über die Jahre erstellt, die ich mir gerne mit der Methode die ich probiert habe anpassen würde.
ps2: Ja der DuppeKiller löscht natürlich im ersten Moment falsch, weil ich in Zeile 231
TypeString auf #False setze und dann Strings mit Buchstaben aus Spalte 1 zu Values umwandeln lasse.
Was natürlich immer dafür sorgt das es viele Werte mit 0 gibt, und dann gibts halt vieles Doppelte.
Den Speicherfehler gibt es wenn ich TypeString auf #True setze !
Siehe Kommentare im Code unten.