Sortierung in ASort()

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

Moderator: Moderatoren

Antworten
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Sortierung in ASort()

Beitrag von Jan »

Moin,

in einem größeren Projekt stoße ich gerade auf etwas überraschendes. Gesetzt is SET COLLATION TO GERMAN, kein SET LEXICAL, kein SET EXACT. Im XbpBrowse werden Umlaute korrekt einsortiert in den jeweils ausgeschriebenen Umlauten. Es gibt Einträge mit der eckigen Klammer als erstem Zeichen, die werden vor allen Buchstaben einsortiert.

Aber bei ASort() ist das anders. Da kommen nach den "normalen" Buchstaben erst die Einträge mit den eckigen Klammern an Position 1, und danach die Umlaute.

Also im Browse:
[
A
B
OE
Ö
Z

Im ASort:
A
B
OE
[
Ö

Die Sortierzeile:

Code: Alles auswählen

   ASort(aPersonenIndex, , , {|x, y| x[1] + x[2] < y[1] + y[2]})
Sortierung ist auf Nachname + Vorname, daher die kombinierte Sortierung.

Wie kommt sowas? Und vor Allem: Was kann ich dagegen tun?

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Marcus Herz
1000 working lines a day
1000 working lines a day
Beiträge: 851
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 39 Mal
Danksagung erhalten: 192 Mal
Kontaktdaten:

Re: Sortierung in ASort()

Beitrag von Marcus Herz »

Hi Jan
Xbpbrowse hat die Sortierung der dbe. Asort die von c++, weil im Speicher. Ich bin Grad nicht im Office. Aber du musst letztendlich mit setlocale die sortierung ident mit der dbe abstimmen. Das gleiche Problem hast du mit ads. Ich glaub ich hab set collation to ansi gesetzt.
Gruß Marcus

Erkenne, was du findest, dann weißt du, wonach du gesucht hast
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Sortierung in ASort()

Beitrag von Jan »

Hallo Marcus,

um ehrlich zu sein: Ich hätte erwartet, das die Sortierung in allen Bereichen eines Xbase++-Programms identisch wäre. Da muß sich in meinen Augen die Sprache drum kümmern, nicht der Anwender.

Ich hatte dann mal testweise ein SetLexRule eingebaut, womit ich das dann natürlich korrekt hinbekommen habe. Aber wie gesagt, warum muß ich da manuell eingreifen um zwei Sprachbestandteile dazu zu bringen, sich hier identisch zu vrhalten?

Ein SET COLLATION TO ANSI gibt es nicht, das gibt einen Compilerfehler. Ein SET COLLATION TO SYSTEM bringt nich ganz daws, was gebraucht wird. Die [ wird korrekt an den Anfang gesetzt. Aber Umlaute werden nicht korrekt einsortiert, sondern hinter dem Hauptbuchstaben enisorteirt. Also z. B. Ö nach ÖZ. Und nicht an die Stelle von OE.

Was mir dazu noch aufgefallen ist: Bei den dazugehörogen SET-Dokus in der Hilfe heißt es immer, die seien Thread-Local. Aber das Programm besteht aus dutzenden Threads, und diese Einstellungen gelten überall gleich

Also muß ich doch erst einmal weiter mit SET ELXICAL weiter arbeiten, das klappt wenigsten exakt so, wie das im Browse auch läuft.

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