Hallo,
wenn ich ein zweidimensionales Array habe, und das nach zwei oder drei Spalten sortieren möchte - wie bekomme ich das hin? Ich war mir eigentlich sicher wie das funktioniert - der macht aber total komische Sachen.
Nehmen wir mal an, ich habe ein Feld Nachname (C25), ein Feld Datum (D8), und ein Feld Uhrzeit (C5). Jetzt möchte ich im einfachsten Fall alles nach Datum sortieren, und darin alle Einträge mit gleichem Datum nach Uhrzeit. Oder etwas aufwändiger alles nach Nachnamen, alle gleichen Nachnamen zusätzlich nach Datum, und alle gleichen Nachnamen mit gleichem Datum auch noch nach Uhrzeit.
Hat da jemand eine Idee? Die Frage ist rein rhetorisch gemeint! Dann natürlich haben die meisten hier dazu eine Idee.
Jan
Array kaskadiert sortieren [Erledigt]
Moderator: Moderatoren
- Jan
- Marvin
- Beiträge: 14655
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Array kaskadiert sortieren [Erledigt]
Zuletzt geändert von Jan am Di, 11. Sep 2018 13:09, insgesamt 1-mal geändert.
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9367
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 102 Mal
- Danksagung erhalten: 361 Mal
- Kontaktdaten:
Re: Array kaskadiert sortieren
Code: Alles auswählen
aSort(aData,,,{|aY1,aY2|DtoS(aY1[8])+Upper(aY1[25])+aY1[5] < DtoS(aY2[8])+Upper(aY2[25])+aY2[5]})
Herzlich,
Tom
Tom
- Jan
- Marvin
- Beiträge: 14655
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: Array kaskadiert sortieren
Hallo Tom,
das war der erste Versuch, den ich gemacht hatte. Hat zwar irgend was sortiert, aber zwischendurch auch immer mal wieder Ausreißer gehabt. So ganz einwandfrei war das also leider nicht.
Jan
das war der erste Versuch, den ich gemacht hatte. Hat zwar irgend was sortiert, aber zwischendurch auch immer mal wieder Ausreißer gehabt. So ganz einwandfrei war das also leider nicht.
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9367
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 102 Mal
- Danksagung erhalten: 361 Mal
- Kontaktdaten:
Re: Array kaskadiert sortieren
Hallo, Jan.
Ich benutze solche Ausdrücke in beliebig komplexen und sehr großen Arrays, ganz ohne Probleme. Ausreißer kann es m.E. nur durch unterschiedliche Längen geben (DtoS() ist zwar immer gleich, aber Upper() müsste man ggf. noch um ein Pad() ergänzen!) - oder durch Zeichensatzprobleme, was ich aber für unwahrscheinlich halte. Ansonsten arbeitet aSort() hier fehlerfrei und flink.
Ich benutze solche Ausdrücke in beliebig komplexen und sehr großen Arrays, ganz ohne Probleme. Ausreißer kann es m.E. nur durch unterschiedliche Längen geben (DtoS() ist zwar immer gleich, aber Upper() müsste man ggf. noch um ein Pad() ergänzen!) - oder durch Zeichensatzprobleme, was ich aber für unwahrscheinlich halte. Ansonsten arbeitet aSort() hier fehlerfrei und flink.
Herzlich,
Tom
Tom
- komnick
- UDF-Programmierer
- Beiträge: 75
- Registriert: Mi, 04. Jun 2014 9:56
- Wohnort: Berlin
- Hat sich bedankt: 1 Mal
- Danksagung erhalten: 5 Mal
Re: Array kaskadiert sortieren
Hallo Jan,
sind die Namensfelder im Array vielleicht nur maximal 25 Stellen lang, können aber kürzer sein?
Dann ist vielleicht ein fehlendes PADR() das Problem:
ASORT(aData,,, {|aY1,aY2|;
PADR(UPPER(aY1[1]),25)+DTOS(aY1[2])+aY1[3] < ;
PADR(UPPER(aY2[1]),25)+DTOS(aY2[2])+aY2[3]})
Gruß
Martin
P.S. Tom war schneller...
sind die Namensfelder im Array vielleicht nur maximal 25 Stellen lang, können aber kürzer sein?
Dann ist vielleicht ein fehlendes PADR() das Problem:
ASORT(aData,,, {|aY1,aY2|;
PADR(UPPER(aY1[1]),25)+DTOS(aY1[2])+aY1[3] < ;
PADR(UPPER(aY2[1]),25)+DTOS(aY2[2])+aY2[3]})
Gruß
Martin
P.S. Tom war schneller...
- Jan
- Marvin
- Beiträge: 14655
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: Array kaskadiert sortieren
Hallo Ihr beiden,
Ihr habt Recht. Das gehört jetzt in die Kategorie Anfängerfehler. Bei einem Index muß ich ja auch darauf achten das der Ausdruck immer gleich lang ist. Da pass ich ganz automatisch drauf auf - hier im ASort() hab ich das glatt verpennt.
Danke für den Wegweiser.
Jan
Ihr habt Recht. Das gehört jetzt in die Kategorie Anfängerfehler. Bei einem Index muß ich ja auch darauf achten das der Ausdruck immer gleich lang ist. Da pass ich ganz automatisch drauf auf - hier im ASort() hab ich das glatt verpennt.
Danke für den Wegweiser.
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.