Über die Auswirkungen von SetCollation(): Unterschied zwischen den Versionen
Georg (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „ == Bedeutung von SET COLLATION / SetCollation() == Auf der einen Seite beeinflussen die beiden Umgebungsfunktionen das Verhalten des Programms in Bezug auf V…“) |
Georg (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
||
Zeile 28: | Zeile 28: | ||
TESTCOLLATION.PRG | TESTCOLLATION.PRG | ||
Besonders möchte ich auf den COMPILE_FLAG /ga hinweisen | Besonders möchte ich auf den COMPILE_FLAG /ga hinweisen. Eine Änderung dieses Flags auf /go bzw. das Weglassen dieser beiden Flags führt zu unterschiedlicher Behandlung der Umlaute. Es lohnt sich schon, das einmal zu vergleichen. Wir werden uns hier auf /ga beschränken. | ||
#INCLUDE "Collat.CH" | #INCLUDE "Collat.CH" | ||
Zeile 145: | Zeile 145: | ||
1: Schulze | 1: Schulze | ||
Press any key to continue... | Press any key to continue... | ||
{| class="wikitable" | |||
|- | |||
! SYSTEM !! ASCII !! GERMAN !! DIN !! DANISH | |||
|- | |||
| 4: Möller || 3: Muller || 4: Möller || 4: Möller || 3: Muller | |||
|- | |||
| 3: Muller || 5: Munden || 2: Müller || 3: Muller || 2: Müller | |||
|- | |||
| 2: Müller || 3: Muller || 3: Muller || 2: Müller || 5: Munden | |||
|- | |||
| 5: Munden || 2: Müller || 5: Munden || 5: Munden || 4: Möller | |||
|- | |||
| 7: Polten || 7: Polten || 6: Pölten || 7: Polten || 7: Polten | |||
|} |
Version vom 15. Mai 2013, 08:43 Uhr
Bedeutung von SET COLLATION / SetCollation()
Auf der einen Seite beeinflussen die beiden Umgebungsfunktionen das Verhalten des Programms in Bezug auf Vergleiche und Sortierung.
Für den Einsatz der CDXDBE ist wichtig, dass die Einstellung, die durch SET COLLATION festgelegt wurde, in der CDX-Datei hinterlegt wird und nicht änderbar ist.
Wenn also eine CDX-Datei mit DANISH Collation erstellt wurde, wird die Sortierfolge immer mehr als seltsam erscheinen, selbst dann, wenn in dem Programm, das die CDX-Datei verwendet, als erste Anweisung ein SET COLLATION TO DIN steht.
Ein Beispielprogramm für die Auswirkung von SET COLLATION
Zuerst einmal die (leicht gekürzte) Project.XPJ:
[PROJECT] COMPILE = xpp COMPILE_FLAGS = /ga /p /q /w /wl DEBUG = yes GUI = yes LINKER = alink LINK_FLAGS = /PM:PM RC_COMPILE = arc RC_FLAGS = /v PROJECT.XPJ [PROJECT.XPJ] TC.EXE [TC.EXE] TESTCOLLATION.PRG
Besonders möchte ich auf den COMPILE_FLAG /ga hinweisen. Eine Änderung dieses Flags auf /go bzw. das Weglassen dieser beiden Flags führt zu unterschiedlicher Behandlung der Umlaute. Es lohnt sich schon, das einmal zu vergleichen. Wir werden uns hier auf /ga beschränken.
#INCLUDE "Collat.CH" FUNCTION Main() Local aCollations := {COLLAT_SYSTEM, COLLAT_ASCII, COLLAT_GERMAN, COLLAT_USER} Local nI, nLen nLen := Len(aCollations) FOR nI := 1 TO nLen GenerateTable(aCollations[nI]) FillTable() ShowTable() dbCloseAll() NEXT RETURN (.T.) FUNCTION FillTable() Local aData := {"Schulze", "Müller", "Muller", "Möller", "Munden", "Pölten", "Polten", "Pulten"} Local nI, nLen nLen := Len(aData) FOR nI := 1 TO nLen dbAppend() FieldPut(1, aData[nI]) NEXT RETURN (.T.) FUNCTION ShowTable() CLS dbGoTop() WHILE !EoF() ? Str(Recno(), 3) + ": " + FieldGet(1) dbSkip(1) END WAIT RETURN (.T.) FUNCTION GenerateTable(nCollation) Local aStru IF File("Collat.cdx") fErase("Collat.cdx") ENDIF IF File("Collat.dbf") fErase("Collat.dbf") ENDIF aStru := {; {"NACHNAME", "C", 32, 0}; } dbCreate("Collat", aStru, "FOXCDX") dbUseArea(.T., "FOXCDX", "Collat") SetCollation(nCollation) INDEX ON NACHNAME TAG "A1" TO COLLAT RETURN (.T.) FUNCTION DBESys() IF !DbeLoad("FOXDBE", .T.) ENDIF IF !DbeLoad("CDXDBE" , .T.) ENDIF IF !DbeBuild("FOXCDX", "FOXDBE", "CDXDBE" ) ENDIF RETURN (.T.)
Das Programm durchläuft fünfmal (oder öfter, falls man weitere COLLAT_ Einträge in aCollations hinterlegt) das Erstellen der Dateien, das Füllen sowie die Anzeige.
Da wir mit figurativen Konstanten arbeiten, muss die "Collat.CH" eingebunden werden, in der die verschiedenen, Xbase++ bekannten Collations hinterlegt sind.
Interessant sind die Ergebnisse der Testläufe:
Collation = System 4: Möller 3: Muller 2: Müller 5: Munden 7: Polten 6: Pölten 8: Pulten 1: Schulze Press any key to continue...
Collation = ASCII 3: Muller 5: Munden 4: Möller 2: Müller 7: Polten 8: Pulten 6: Pölten 1: Schulze Press any key to continue...
Collation = GERMAN 4: Möller 2: Müller 3: Muller 5: Munden 6: Pölten 7: Polten 8: Pulten 1: Schulze Press any key to continue...
Collation = DIN 4: Möller 3: Muller 2: Müller 5: Munden 7: Polten 6: Pölten 8: Pulten 1: Schulze Press any key to continue...
Collation = DANISH 3: Muller 2: Müller 5: Munden 4: Möller 7: Polten 8: Pulten 6: Pölten 1: Schulze Press any key to continue...
SYSTEM | ASCII | GERMAN | DIN | DANISH |
---|---|---|---|---|
4: Möller | 3: Muller | 4: Möller | 4: Möller | 3: Muller |
3: Muller | 5: Munden | 2: Müller | 3: Muller | 2: Müller |
2: Müller | 3: Muller | 3: Muller | 2: Müller | 5: Munden |
5: Munden | 2: Müller | 5: Munden | 5: Munden | 4: Möller |
7: Polten | 7: Polten | 6: Pölten | 7: Polten | 7: Polten |