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
aufstraße
. - Buchstaben mit diakritischen Zeichen werden anders als Buchstaben ohne diakritische Zeichen sortiert. In den Sortierreihenfolgen "General" und "Spanisch" wird
äa
vorab
, dochab
voräb
sortiert. - Ligaturen, wie
ß
, werden genauso wie ihre entsprechenden Zeichenerweiterungen sortiert. Zum Beispiel wirdstraße
genauso wieStrasse
sortiert undcæsar
genauso wieCaesar
. - In einigen Sprachen werden zwei Zeichen als ein Zeichen sortiert. Im Spanischen beispielsweise wird das
Ch
inChar
als ein Zeichen zwischenC
undD
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
Klicken Sie im Menü Extras auf Optionen.
Wählen Sie die Registerkarte Daten aus.
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