DataObjects im Array und Asort()

Alle Fragen um die Programmierung, die sich sonst nicht kategorisieren lassen. Von Makro bis Codeblock, von IF bis ENDIF

Moderator: Moderatoren

Antworten
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 18667
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

DataObjects im Array und Asort()

Beitrag von Manfred » Mi, 20. Mär 2019 13:39

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.
Gruß Manfred
Mitglied der XUG Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite

Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 7595
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Kontaktdaten:

Re: DataObjects im Array und Asort()

Beitrag von Tom » Mi, 20. Mär 2019 13:44

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.
Herzlich,
Tom

Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 18667
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Re: DataObjects im Array und Asort()

Beitrag von Manfred » Mi, 20. Mär 2019 16:05

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.
Gruß Manfred
Mitglied der XUG Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite

Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 13359
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Kontaktdaten:

Re: DataObjects im Array und Asort()

Beitrag von Jan » Mi, 20. Mär 2019 16:26

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
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 14767
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Re: DataObjects im Array und Asort()

Beitrag von brandelh » Mo, 01. Apr 2019 11:25

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.
Gruß
Hubert

Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 13359
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Kontaktdaten:

Re: DataObjects im Array und Asort()

Beitrag von Jan » Mo, 01. Apr 2019 11:58

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

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.

Antworten