Freigeben über


Sortieren von Daten in internationalen Anwendungen

Nachdem Sie eine Tabelle mit internationalen Daten erstellt haben, prüfen Sie, ob Ihre Anwendung die Daten korrekt sortiert. Die Sortierweise der Daten hängt von der mit der Tabelle verbundenen Codepage ab, da diese die verfügbaren Sortierreihenfolgen angibt..

Arbeiten mit Sortierreihenfolgen

Sortierreihenfolgen enthalten die Sortierregeln verschiedener Gebietsschemata und ermöglichen es Ihnen so, Daten in diesen Sprachen korrekt zu sortieren. In Visual FoxPro legt die aktuelle Sortierreihenfolge die Ergebnisse von Vergleichsoperationen auf Zeichenausdrücken sowie die Reihenfolge fest, in der Datensätze in indizierten oder sortierten Tabellen angezeigt werden.

Anmerkung   In Umgebungen mit Doppelbyte-Zeichen (DBCS) wird die Sortierung anders durchgeführt.

Verwenden Sie die geeignete Sortierreihenfolge, da unterschiedliche Sortierreihenfolgen zu unterschiedlichen Ergebnissen führen, wie die folgende Tabelle zeigt.

Unsortiert "Machine" Objektfeld Spanisch
!@#$ Leerzeichen Leerzeichen Leerzeichen
1234 !@#$ !@#$ !@#$
Leerzeichen 1234 1234 1234
Caesar Caesar Äa Äa
cæsar Car Ab Ab
Strasse Char Äb Äb
straße Tschechisch Caesar Caesar
Car Strasse cæsar cæsar
Char Ab Car Car
Tschechisch cæsar Çar Çar
Ab Straße Char Tschechisch
Çar Çar Tschechisch Char
Äa Äa Strasse Strasse
Äb Äb straße Straße

Richtlinien für die Sortierreihenfolge

Für die Wahl einer Sortierreihenfolge gelten die folgenden Richtlinien:

  • Wenn Sie internationale Zeichen richtig sortieren möchten, vermeiden Sie die Sortierreihenfolge "Machine", da diese die Zeichen in ASCII-Reihenfolge sortiert. So folgt beispielsweise Çar auf straße.
  • Buchstaben mit diakritischen Zeichen werden anders als Buchstaben ohne diakritische Zeichen sortiert. In den Sortierreihenfolgen "General" und "Spanisch" wird äa vor ab, doch ab vor äb sortiert.
  • Ligaturen, wie ß, werden genauso wie ihre entsprechenden Zeichenerweiterungen sortiert. Zum Beispiel wird straße genauso wie Strasse sortiert und cæsar genauso wie Caesar.
  • In einigen Sprachen werden zwei Zeichen als ein Zeichen sortiert. Im Spanischen beispielsweise wird das Ch in Char als ein Zeichen zwischen C und D sortiert.

Die folgenden Abschnitte beschreiben, wie Sie Sortierreihenfolgen angeben, die aktuelle Sortierreihenfolge überprüfen und die Wirkung von Sortierreihenfolgen erkennen.

Angeben von Sortierreihenfolgen

Sie können eine Sortierreihenfolge für Zeichenfelder angeben, die in den anschließenden Indizier- und Sortieroperationen verwendet wird.

So geben Sie eine Sortierreihenfolge an

  1. Klicken Sie im Menü Extras auf Optionen.

  2. Wählen Sie die Registerkarte Daten aus.

  3. Wählen Sie im Feld Sortierfolge die geeignete Sortierreihenfolge aus.

    Wenn Sie diese Einstellung für künftige Visual FoxPro-Sitzungen speichern möchten, wählen Sie Als Standardeinstellung verwenden.

    Tipp   Sie können auch mit dem SET COLLATE TO-Befehl oder der COLLATE-Anweisung eine Sortierreihenfolge in Ihre Konfigurationsdatei Config.fpw einbinden. Weitere Informationen zu Config.fpw finden Sie unter Konfigurieren von Visual FoxPro.

Die aktuelle Sortierreihenfolge hat zwar keinen Einfluss auf vorher erstellte Indizes, beeinflusst jedoch die Ergebnisse von Vergleichen und Befehlen wie beispielsweise SEEK und SELECT - SQL.

Sie können die Sortierreihenfolge jederzeit ändern. So können Sie beispielsweise nach dem Öffnen einer Kundentabelle Indexnamen zur Darstellung von unterschiedlichen Sortierreihenfolgen erstellen, wie die folgenden Programmzeilen zeigen. Anschließend können Sie die Sortierreihenfolge ändern, indem Sie einfach einen anderen Namen verwenden:

USE customer
SET COLLATE TO "GENERAL"
INDEX ON fname TAG mygeneral ADDITIVE
SET COLLATE TO "MACHINE"
INDEX ON custid TAG mymachine ADDITIVE
SET COLLATE TO "DUTCH"
INDEX ON lname TAG mydutch ADDITIVE

Anmerkung   Die Sortierreihenfolge für einen Index hat Vorrang vor der aktuellen Sortierreihenfolge.

Die aktuelle Codepage legt fest, welche Sortierreihenfolgen verfügbar sind. Wenn Sie mit SET COLLATE eine Sortierreihenfolge angeben, die von der aktuellen Codepage nicht unterstützt wird, gibt Visual FoxPro eine Fehlermeldung aus. Wenn Sie darüber hinaus eine von der aktuellen Codepage nicht unterstützte Sortierreihenfolge in Config.fpw angeben, wird für die Sortierreihenfolge die Standardeinstellung "Machine" ausgewählt.

Überprüfen von Sortierreihenfolgen

Sie können die aktuelle Sortierreihenfolge mit der SET ('COLLATE')-Funktion bestimmen. So können Sie beispielsweise die aktuelle Sortierreihenfolge speichern, die Sortierreihenfolge dann als "Machine" festlegen, die von Ihnen beabsichtigten Arbeiten durchführen und schließlich die ursprüngliche Sortierreihenfolge wiederherstellen.

cCurrentOrder=SET('COLLATE')
SET COLLATE TO 'MACHINE'
* code that requires the Machine sort order
SET COLLATE TO cCurrentOrder  && return to the previous sort order

Außerdem können Sie mit der IDXCOLLATE( )-Funktion die Sortierreihenfolge eines Indexes oder eines Indexnamens bestimmen.

Erkennen der Wirkung von Sortierreihenfolgen

Die Sortierreihenfolge wirkt sich auf die Ergebnisse von Zeichenfolgenvergleichen, SEEK und SELECT - SQL, wie im folgenden beschrieben, aus.

Vergleichen von Zeichenfolgen

Bei allen Sortierreihenfolgen außer "Machine" und "Unique Weight" wird die Groß- und Kleinschreibung ignoriert. Aus diesem Grund brauchen Sie in Ihren Indexausdrücken UPPER( ) nicht zu verwenden.

Die aktuelle Sortierreihenfolge wirkt sich auf Zeichenfolgenvergleiche aus. Wenn Sie beispielsweise für die Sortierreihenfolge "General" festlegen, geben die folgenden Anweisungen Wahr (.T.) zurück:

?"A" = "a"
?"Straße"="Strasse"
?"æ" = "ae"

Wenn Sie hingegen die Sortierreihenfolge "Machine" verwenden, geben alle diese Anweisungen Falsch (.F.) zurück, da die Zeichenfolgen Byte für Byte exakt verglichen werden.

Der Zeichenfolgen-Vergleichsoperator (= =) gibt dasselbe Ergebnis zurück wie bei Vergleichen nach Wert oder bei Vergleichen mit Hilfe der Sortierreihenfolge "Machine", d. h., die Zeichenfolgen werden Byte für Byte verglichen. Zum Beispiel gibt die folgende Anweisung .F. (falsch) zurück:

? "Straße" == "Strasse"

Anmerkung   Wenn Sie den Zeichenfolgen-Vergleichsoperator (= =) verwenden, ignoriert Visual FoxPro SET EXACT.

Verwenden von SEEK

Visual FoxPro ignoriert bei einer Teilschnellsuche diakritische Zeichen. Eine Teilschnellsuche wird ausgeführt, wenn der Ausdruck kürzer als der Schlüssel ist. Falls diakritische Zeichen wichtig sind, sollten Sie deshalb SCAN FOR...ENDSCAN oder LOCATE FOR...CONTINUE statt SEEK verwenden.

Die Verwendung von SCAN und LOCATE anstelle von SEEK bietet folgende Vorteile:

  • SCAN und LOCATE berücksichtigen diakritische Zeichen.
  • Visual FoxPro optimiert die Ergebnisse von SCAN oder LOCATE voll, wenn als aktuelle Sortierreihenfolge "Machine" oder "Unique Weight" ausgewählt wurde.
  • SCAN und LOCATE "merken" sich die Bedingung für ihren Aufruf und ermöglichen es Ihnen so, sie zum Durchlaufen von Schleifen mit einer Bedingung zu verwenden. Im Gegensatz dazu legt SEEK den Beginn der Suche an einer beliebigen Stelle im Index fest, und SKIP läuft ab dieser Stelle im Index nach unten. Entsprechend liefert SEEK bei internationalen Daten möglicherweise nicht die gewünschten Ergebnisse.

Verwenden von SELECT - SQL

Der SELECT - SQL-Befehl verwendet die aktuelle Sortierreihenfolge. Wenn beispielsweise ein Indexname auf der Sortierreihenfolge "General" basiert und die (von SET ('COLLATE') zurückgegebene) aktuelle Sortierreihenfolge "Machine" ist, basiert das Ergebnis von SELECT - SQL auf "Machine".

Verwenden Sie für die aktuelle Sortierreihenfolge mit SELECT - SQL die Klausel ORDER BY.

Verwenden von Indizes

Sortierreihenfolgen legen die Reihenfolge von Datensätzen in indizierten Tabellen fest. Beachten Sie die folgenden Richtlinien zur Verwendung von Indizes bei Sortierreihenfolgen:

  • Wenn Indizes, die in früheren FoxPro-Versionen erstellt wurden, eine andere Sortierreihenfolge als "Machine" verwenden sollen, erstellen Sie die Indizes neu.
  • Erstellen Sie dBASE-Indizes neu, damit sie die Visual FoxPro-Sortierreihenfolgen nutzen können.
  • Erstellen Sie einen Index neu mit dem REINDEX-Befehl, da REINDEX die Sortierreihenfolge unverändert beibehält.

Siehe auch

Von Visual FoxPro unterstützte Codepages | Anwendungserstellung mit Doppel-Byte-Zeichensätzen | Entwickeln internationaler Anwendungen | Registerkarte "Daten", Dialogfeld "Optionen" | Erstellen oder Ändern von Programmen