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