Seltsames Verhalten bei strukturiertem Array
Verfasst: 11.05.2017 07:36
Hallo,
folgende Ausgangslage:
Ich habe ein Programmfenster mit einem Listview-Gadget, das 44 Einträge enthält, die aus einer Textdatei eingelesen wurden. Jeder einzelne Eintrag hat das Format "nn,n × nn,n × nn,n", wo n für eine Ziffer steht und die Fließpunktkomponente häufig auch wegfällt, also z.B. 64 × 40 × 50,5 (es handelt sich um Länge-, Breite- u. Höhe-Maßangaben in Zentimeter).
Ich habe nun zu dieser Liste eine Sortierfunktion geschrieben, die die einzelnen Einträge nach Volumen (L × B × H) sortieren soll. Der Case zur Button-Eventbehandlung, der diese Sortierfunktion auslöst, sieht folgendermaßen aus (#Lf_Pm ist #Gadget des ListView-Gadgets):
Zuerst wird also mittels Structure ein neuer benutzerdefinierter Datentyp "Paket" kreiert und dann ein Array dieses Datentyps erstellt, das alle Daten der ListView-Liste aufnimmt. Mittels StringField werden die Listeneinträge in ihre L/B/H-Teile zerlegt und diese dann in der For-Next-Schleife den \L-, \B- und \H-Feldern von P() zugewiesen. Mittels
wird dann das Volumen berechnet -- das letzte Feld von P(), nach dem nach Durchlaufen der Schleife mittels SortStructuredArray das strukturierte Array dann sortiert wird. Dann wird die ListView-Liste gelöscht und die sortierten Werte aus P() in die Liste zurückgeschrieben.
Der Kode tut an sich, was er soll, mit einer kleinen, für mich unerklärlichen Ausnahme: Bei der allerersten V-Variable des strukturieren Feldes, P(0)\V -- und nur bei dieser --, funktioniert die Volumenberechnung nicht. Den Variablen P(0)\L, P(0)\B und P(0)\H werden die korrekten Werte aus der ListView-Liste zugewiesen, aber P(0)\V bleibt bei 0.0. Wie gesagt: Ab der zweiten V-Variable P(1)\V funktioniert die Berechnung tadellos.
Ich würde gern an dieser Stelle ein Snapshot der Variablenliste posten, die die Felder von P(0), P(1) und P(2) zeigt, aber leider kann man keine Dateien hochladen, sondern nur URLs für Bilder angeben.
Hat jemand eine Idee, wieso P(0)\V nicht berechnet wird?
Vielen Dank
folgende Ausgangslage:
Ich habe ein Programmfenster mit einem Listview-Gadget, das 44 Einträge enthält, die aus einer Textdatei eingelesen wurden. Jeder einzelne Eintrag hat das Format "nn,n × nn,n × nn,n", wo n für eine Ziffer steht und die Fließpunktkomponente häufig auch wegfällt, also z.B. 64 × 40 × 50,5 (es handelt sich um Länge-, Breite- u. Höhe-Maßangaben in Zentimeter).
Ich habe nun zu dieser Liste eine Sortierfunktion geschrieben, die die einzelnen Einträge nach Volumen (L × B × H) sortieren soll. Der Case zur Button-Eventbehandlung, der diese Sortierfunktion auslöst, sieht folgendermaßen aus (#Lf_Pm ist #Gadget des ListView-Gadgets):
Code: Alles auswählen
...
Case #Sf_S ; Schaltfläche "Sortieren"
Structure Paket
L.s ; Länge
B.s ; Breite
H.s ; Höhe
V.d ; Volumen
EndStructure
Define AE=CountGadgetItems(#Lf_Pm)-1, Ix ; AE = Anzahl der Einträge, Ix = Index
Define.s Km, Tr=" × " ; Km = Komplettmaße, Tr = Trennstring (für StringField)
Dim P.Paket(AE)
For Ix=0 To AE
Km=GetGadgetItemText(#Lf_Pm, Ix)
P(Ix)\L = StringField(Km, 1, Tr)
P(Ix)\B = StringField(Km, 2, Tr)
P(Ix)\H = StringField(Km, 3, Tr)
P(Ix)\V = ValD(P(Ix)\L) * ValD(P(Ix)\B) * ValD(P(Ix)\H)
Next
SortStructuredArray(P(), #PB_Sort_Descending, OffsetOf(Paket\V), #PB_Double)
ClearGadgetItems(#Lf_Pm)
For Ix=0 To AE
AddGadgetItem(#Lf_Pm, -1, P(Ix)\L + Tr + P(Ix)\B + Tr + P(Ix)\H)
Next
EndSelect
Code: Alles auswählen
P(Ix)\V = ValD(P(Ix)\L) * ValD(P(Ix)\B) * ValD(P(Ix)\H)
Der Kode tut an sich, was er soll, mit einer kleinen, für mich unerklärlichen Ausnahme: Bei der allerersten V-Variable des strukturieren Feldes, P(0)\V -- und nur bei dieser --, funktioniert die Volumenberechnung nicht. Den Variablen P(0)\L, P(0)\B und P(0)\H werden die korrekten Werte aus der ListView-Liste zugewiesen, aber P(0)\V bleibt bei 0.0. Wie gesagt: Ab der zweiten V-Variable P(1)\V funktioniert die Berechnung tadellos.
Ich würde gern an dieser Stelle ein Snapshot der Variablenliste posten, die die Felder von P(0), P(1) und P(2) zeigt, aber leider kann man keine Dateien hochladen, sondern nur URLs für Bilder angeben.
Hat jemand eine Idee, wieso P(0)\V nicht berechnet wird?
Vielen Dank