Seite 1 von 1

DataObjects im Array und Asort()

Verfasst: Mi, 20. Mär 2019 13:39
von Manfred
ich habe mal wieder etwas entdeckt, was mal wieder so richtig Klasse ist. (hat sich auch mindestens einer hier aus dem Forum live angesehen und selbst ein wenig gestaunt).
Also folgendes Problem, ich durchlaufe eine Tabelle und schreibe die DAten in ein DataObject, welches ich dann nach jedem Satz in ein Array kopiere.

Code: Alles auswählen

local dob := dataObject():new()
         do while ! Eof()
         dob:name1 := field->name
         dob:zahl     := machestringdraus(field->zahl) // und aus . wird ein , gemacht
         aadd(aarray,dob:copy())
         skip
enddo
Das wird dann in einem Browser angezeigt.. Klappt alles prima, ohne Probleme.
jetzt gibt es die Möglichkeit jede Spalte zu sortieren. Rauf oder runter, egal, hauptsache sortieren. Hier nur knapp:

Code: Alles auswählen

Asort(aarray,,,{|x,y| x:name1 > y:name1})
Das klappt prima. Egal ob hoch oder runter
das hier aber:

Code: Alles auswählen

Asort(aarray,,,{|x,y| x:zahl > y:zahl})
ergibt Mist. Wenn negative Werte drin stehen, dann erscheinen die an total falscher Stelle, mittendrin sind leere Zeilen und dann erscheint irgendwann wieder ein Wert. Sprich, die Reihenfolge ist total falsch. In mir keimt der Verdacht, das DataObects mit solchen Inhalten nicht richtig sortiert (werden können) ?
egal, was ich versuche, direkte Zahlen schreiben, oder den Index auf Val() setzen, es bringt nichts.Irgendwie kommt bei jeder neuen Aktion auch neuer Mist an den Tag.

Re: DataObjects im Array und Asort()

Verfasst: Mi, 20. Mär 2019 13:44
von Tom
Deine Zahlen sind ja Strings, Manfred. Und Zeichenfolgen sind anders sortiert als Zahlen - vor allem, wenn führende Leerzeichen fehlen:

1
10
11
12
2
20
usw.

Was macht Deine Funktion "macheStringdaraus" genau? Und was passiert, wenn Du direkt in ein Array schreibst und das dann sortierst? Ich vermute, das das gleiche passiert. Deine Formatierungsfunktion ist die Ursache.

Re: DataObjects im Array und Asort()

Verfasst: Mi, 20. Mär 2019 16:05
von Manfred
Hi Tom,
ich habe egrade nochmal einen kleinen Tipp unter der hand erhalten und den noch etwas ausgefeilt erweitert. Ich vermute das auch ein riesengroßer Denkfehler von mir im Spiel war. Ich werde die Idee mal einbauen und schauen, ob so das Problem behoben wird/ist. Es hängt aber auch nur bedingt mit Deinem Vorschlag zusammen. Der String wird immer 10stellig zurückgegeben und am Anfang aufgefüllt mit Leerzeichen. Es war/ist aber doch etwas schwieriger als gedacht. Aber der Asort scheint doch zu klappen. Das war ein Schnellschuß, der falsch war.

Re: DataObjects im Array und Asort()

Verfasst: Mi, 20. Mär 2019 16:26
von Jan
Manfred,

ich arbeite da ja auch ständig mit. Ich habe da keinerlei Probleme mit Sortierungen von Arrays mit DOs, auch nicht bei numerischen Werten. Das muß irgendwo anders dran liegen.

Jan

Re: DataObjects im Array und Asort()

Verfasst: Mo, 01. Apr 2019 11:25
von brandelh
welcher Datentyp liegt genau vor ?
Sind alle Felder gefüllt ? Leere werden zu NIL oder ?
Wenn der Datentyp stimmt, dann werden Zahlen sauber sortiert, egal ob die in einem Array oder einem DataObjekt gelagert sind.

Re: DataObjects im Array und Asort()

Verfasst: Mo, 01. Apr 2019 11:58
von Jan
brandelh hat geschrieben: Mo, 01. Apr 2019 11:25Sind alle Felder gefüllt ? Leere werden zu NIL oder ?
Korrekt

Jan