Programmierung

Collation – Sortierung wie am Schnürchen

Die alphabetische Sortierung von Zeichenketten ist ein probates Mittel, um in einer Liste schnell ein gesuchtes Element zu finden. Vor allem in Softwarelösungen mit großen Datenmengen, spielt die Sortierung von Zeichenketten eine wichtige Rolle.

Dafür müssen die Elemente in die richtige Sortierfolge (engl. Collation) gebracht werden. Aber welche Sortierfolge ist die richtige?

In diesem Artikel möchte ich diese Frage beantworten und Ihnen eine Möglichkeit vorstellen, mit der Sie Zeichenketten innerhalb von CONZEPT 16 auf die Reihe bringen.

Alphabete

Je nach Land und Sprache sind unterschiedliche Regeln für die korrekte Sortierfolge für die alphabetische Sortierung definiert. Die meisten westlichen Sprachen basieren auf dem lateinischen Alphabet mit den 26 Buchstaben A bis Z. Dazu kommen dann noch weitere Buchstaben – oft mit diakritischen Zeichen – wie Umlaute.

Das deutsche Alphabet enthält außerdem die Umlaute Ä, Ö und Ü sowie das ß (Eszett). Diese werden bei einer alphabetischen Sortierung bei ihren Basiszeichen eingeordnet, also das Ä, Ö und Ü bei A, O und U und das ß beim S.

Zeichensätze

In Software werden diese unterschiedlichen Alphabete in Zeichensätzen zusammengefasst. So enthält der Zeichensatz "Windows-1252" (Windows-Codepage 1252) die Buchstaben, die für die meisten westlichen Sprachen benötigt werden. Neben Deutsch sind dies zum Beispiel auch Französisch, Portugiesisch und Schwedisch.

Der Unicode-Zeichensatz enthält hingegen alle Buchstaben der meisten lebenden Sprachen.

Sortierfolge

Innerhalb der Zeichensätze liegen die Buchstaben nicht in einer alphabetischen Sortierung vor. Das bedeutet, dass für eine korrekte alphabetische Sortierung je nach Land und Sprache das Alphabet des Zeichensatzes in eine andere Reihenfolge gebracht werden muss, um eine korrekte Sortierung zu erhalten.

Eine Auswahl praxisrelevanter Sortierfolgen findet man auf der Seite collation-charts.org. Dort sind für verschiedene Softwarelösungen und Sprachen Tabellen aufgeführt, die die verwendete Sortierfolge beschreiben. So zum Beispiel auch die Sortierfolge beim deutschen Windows Vista.

CONZEPT 16

In CONZEPT 16 lässt sich Sortierung beispielweise über einen Tabellenschlüssel oder die Containerelemente CteTree und CteNode umsetzen. Dabei werden die Zeichenketten allerdings nach dem Alphabet des Zeichensatzes sortiert und nicht nach einem landes- oder sprachspezifischen Alphabet:

  • Franca
  • Franz
  • François (ç nach z)
  • Jakob
  • Julia
  • Jákup (á nach u)
  • Raul
  • Ray
  • Raúl (ú nach y)
  • Zoe
  • Zofia
  • Zoë (ë nach f)

Für die deutsche Sprache wäre dies eine mögliche korrekte Reihenfolge:

  • Franca
  • François (ç nach c)
  • Franz
  • Jakob
  • Jákup (á nach a)
  • Julia
  • Raul
  • Raúl (ú nach u)
  • Ray
  • Zoe
  • Zoë (ë nach e)
  • Zofia

Um diese Sortierfolge zu erreichen, muss die Zeichenkette in eine sortierfähige Form gewandelt werden. Den Buchstaben muss ihre Position im sortierten Alphabet zugeordnet werden.

Die Funktion Str.Collate() – die Sie am Ende des Artikels als Download finden – macht genau das.

Beispiel

// Sortierfolge für Deutschland laden
Str.CollationLoad(_Str.Collation_deDE);

tCteTree # CteOpen(_CteTree);

tCteTree->CteInsertItem(Str.Collate('Franca'), 0, 'Franca');
tCteTree->CteInsertItem(Str.Collate('François'), 0, 'François');
tCteTree->CteInsertItem(Str.Collate('Franz'), 0, 'Franz');

...

// Sortierfolge entladen
Str.CollationUnload();

In der Funktion Str.CollationLoad() wird das übergebene Alphabet geladen. Dabei wird eine Sortierfolge aus allen 255 verschiedenen Zeichen des CONZEPT 16-internen Zeichensatzes – der alle Zeichen der Windows Codepage 1252 enthält – erzeugt. Diese Funktion können Sie einfach um weitere Sortierfolgen erweitern. Die Sortierfolge wird in der Funktion Str.Collate() zur Wandlung der Zeichenkette in eine sortierfähige Form verwendet. Mit der Funktion Str.CollateUnload() wird ein geladenes Sortieralphabet wieder freigegeben.

Fazit

Mit dieser Funktion können Sie Zeichenketten in CONZEPT 16 nach einem beliebigen Alphabet sortieren. Die gebildeten Sortierwerte können Sie beispielsweise in ein Schlüsselfeld einer Tabelle oder ein Containerelement speichern.

Zwar ist diese Möglichkeit keine native Lösung, bietet dafür aber die Möglichkeit erweitert und an die eigenen Bedürfnisse angepasst zu werden.

Download

CONZEPT 16-Prozedur "SysStrCollate" SysStrCollate.prc (5.28 KB)
Sie müssen angemeldet sein, um die Datei herunterladen zu können.

Keine Kommentare

Kommentar abgeben