SORTKEY - Sort-Key Function

SORTKEY (character-string)

Diese Systemfunktion dient zum Konvertieren von "nicht richtig sortierten" Zeichen (oder Kombinationen von Zeichen) in andere Zeichen (oder Kombinationen von Zeichen), die vom Sortierprogramm oder Datenbanksystem alphabetisch "richtig sortiert" werden.

Format/Länge: A253

Es gibt in vielen Landessprachen Zeichen (oder Zeichenkombinationen), die von einem Sortierprogramm oder Datenbanksystem nicht in der richtigen alphabetischen Reihenfolge sortiert werden, da die Reihenfolge der Zeichen im vom Computer verwendeten Zeichensatz nicht immer der alphabetischen Reihenfolge der Zeichen entspricht.

Zum Beispiel wird der spanische Buchstabe CH in der Regel von einem Sortierprogramm bzw. Datenbanksystem wie zwei Buchstaben behandelt und zwischen CG und CI einsortiert — gehört aber eigentlich als eigener Buchstabe im spanischen Alphabet zwischen "C" und "D".

Oder es kann sein, dass Kleinbuchstaben und Großbuchstaben entgegen Ihren Wünschen bei der Sortierreihenfolge nicht gleich behandelt werden, dass Ziffern vor Buchstaben sortiert werden (Sie aber wünschen, dass Buchstaben vor Ziffern sortiert werden) oder dass Sonderzeichen (z.B. Bindestriche in Doppelnamen) zu einer unerwünschten Sortierreihenfolge führen.

In solchen Fällen können Sie die Systemfunktion SORTKEY(character-string) benutzen. Die von SORTKEY berechneten Werte werden nur als Sortierkriterium benutzt, während die ursprünglichen Werte für die Interaktion mit dem Endbenutzer verwendet werden.

Sie können die SORTKEY-Funktion in einem COMPUTE sowie in einer logischen Bedingung als arithmetischen Operanden verwenden.

Als character-string können Sie eine alphanumerische Konstante oder Variable oder eine einzelne Ausprägung eines alphanumerischen Arrays angeben.

Wenn Sie die SORTKEY-Funktion in einem Natural-Programm angeben, wird der User-Exit NATUSKnn aufgerufen — wobei nn der aktuelle Sprachcode (d.h. der aktuelle Wert der Systemvariablen *LANGUAGE) ist.

Sie können diesen User-Exit in jeder Programmiersprache, die über eine Standard-CALL-Schnittstelle verfügt, schreiben. Der mit SORTKEY angegebene character-string wird an den User-Exit übergeben. Der User-Exit muss so programmiert werden, dass er "falsch sortierte" Zeichen in dieser Zeichenkette in entsprechende "richtig sortierte" Zeichen umsetzt. Die umgesetzte Zeichenkette wird dann vom Natural-Programm zur weiteren Verarbeitung verwendet.

Allgemeine Aufruf-Konventionen für externe Programme sind in der Dokumentation zum CALL-Statement erläutert.

Nähere Informationen zu den Aufruf-Konventionen für SORTKEY User-Exits finden Sie im Abschnitt User Exit for Computation of Sort Keys in der Natural Operations Documentation.

Beispiel:

DEFINE DATA LOCAL 
1 CUST VIEW OF CUSTOMERFILE 
  2 NAME 
  2 SORTNAME 
END-DEFINE 
... 
*LANGUAGE := 4 
... 
REPEAT 
  INPUT NAME 
  SORTNAME := SORTKEY(NAME) 
  STORE CUST 
  END TRANSACTION 
  ... 
END-REPEAT 
... 
READ CUST BY SORTNAME 
  DISPLAY NAME 
END-READ 
...

Angenommen, im obigen Beispiel würden bei mehrmaliger Ausführung des INPUT-Statements nacheinander die Werte "Sanchez", "Sandino" und "Sancinto" eingegeben.

Bei der Zuweisung von SORTKEY(NAME) zu SORTNAME würde der User-Exit NATUSK04 aufgerufen. Dieser müsste so programmiert werden, dass er zunächst alle Kleinbuchstaben in Großbuchstaben umsetzt und dann die Zeichenfolge "CH" in "Cx" umsetzt — wobei x dem letzten Zeichen im verwendeten Zeichensatz entspricht, also hexadezimal H’FF’ (vorausgesetzt dieses letzte Zeichen ist kein druckbares Zeichen).

Es werden sowohl die "eigentlichen" Namen (NAME) als auch die für die gewünschte Sortierung umgesetzten Namen (SORTNAME) gespeichert. Zum Lesen der Datei wird SORTNAME verwendet. Dann würden bei Ausführung des DISPLAY-Statements die Namen in der richtigen spanischen alphabetischen Reihenfolge ausgegeben:

Sancinto 
Sanchez 
Sandino