Über die Auswirkungen von SetCollation(): Unterschied zwischen den Versionen
Georg (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
Georg (Diskussion | Beiträge) KKeine Bearbeitungszusammenfassung |
||
(Eine dazwischenliegende Version desselben Benutzers wird nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
== Bedeutung von SET COLLATION / SetCollation() == | == Bedeutung von SET COLLATION / SetCollation() == | ||
Auf der einen Seite beeinflussen die beiden Umgebungsfunktionen das Verhalten des Programms in Bezug auf Vergleiche und Sortierung. | Auf der einen Seite beeinflussen die beiden Umgebungsfunktionen das Verhalten des Programms in Bezug auf Vergleiche und Sortierung. | ||
Zeile 10: | Zeile 12: | ||
== Ein Beispielprogramm für die Auswirkung von SET COLLATION == | == Ein Beispielprogramm für die Auswirkung von SET COLLATION == | ||
=== Projekt-Definitionsdatei Project.xpj === | |||
Zuerst einmal die (leicht gekürzte) Project.XPJ: | Zuerst einmal die (leicht gekürzte) Project.XPJ: | ||
Zeile 29: | Zeile 33: | ||
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. | 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. | ||
=== Programmbeispiel TestCollation.prg === | |||
#INCLUDE "Collat.CH" | #INCLUDE "Collat.CH" | ||
Zeile 88: | Zeile 94: | ||
Da wir mit figurativen Konstanten arbeiten, muss die "Collat.CH" eingebunden werden, in der die verschiedenen, Xbase++ bekannten Collations hinterlegt sind. | Da wir mit figurativen Konstanten arbeiten, muss die "Collat.CH" eingebunden werden, in der die verschiedenen, Xbase++ bekannten Collations hinterlegt sind. | ||
=== Ausgabe des Test-Programms mit verschiedenen Collation-Einstellungen: === | |||
Interessant sind die Ergebnisse der Testläufe: | Interessant sind die Ergebnisse der Testläufe: | ||
Collation = System | |||
4: Möller | 4: Möller | ||
3: Muller | 3: Muller | ||
Zeile 102: | Zeile 111: | ||
Press any key to continue... | Press any key to continue... | ||
Collation = ASCII | |||
3: Muller | 3: Muller | ||
5: Munden | 5: Munden | ||
Zeile 113: | Zeile 122: | ||
Press any key to continue... | Press any key to continue... | ||
Collation = GERMAN | |||
4: Möller | 4: Möller | ||
2: Müller | 2: Müller | ||
Zeile 124: | Zeile 133: | ||
Press any key to continue... | Press any key to continue... | ||
Collation = DIN | |||
4: Möller | 4: Möller | ||
3: Muller | 3: Muller | ||
Zeile 135: | Zeile 144: | ||
Press any key to continue... | Press any key to continue... | ||
Collation = DANISH | |||
3: Muller | 3: Muller | ||
2: Müller | 2: Müller | ||
Zeile 145: | Zeile 154: | ||
1: Schulze | 1: Schulze | ||
Press any key to continue... | Press any key to continue... | ||
=== tabellarischer Vergleich der Ausgabe: === | |||
Zeile 160: | Zeile 171: | ||
|- | |- | ||
| 7: Polten || 7: Polten || 6: Pölten || 7: Polten || 7: Polten | | 7: Polten || 7: Polten || 6: Pölten || 7: Polten || 7: Polten | ||
|- | |||
| 6: Pölten || 8: Pulten || 7: Polten || 6: Pölten || 8: Pulten | |||
|- | |||
| 8: Pulten || 6: Pölten || 8: Pulten || 8: Pulten || 6: Pölten | |||
|- | |||
| 1: Schulze || 1: Schulze || 1: Schulze || 1: Schulze || 1: Schulze | |||
|} | |} |
Aktuelle Version vom 15. Mai 2013, 09:33 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
Projekt-Definitionsdatei Project.xpj
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.
Programmbeispiel TestCollation.prg
#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.
Ausgabe des Test-Programms mit verschiedenen Collation-Einstellungen:
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...
tabellarischer Vergleich der Ausgabe:
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 |
6: Pölten | 8: Pulten | 7: Polten | 6: Pölten | 8: Pulten |
8: Pulten | 6: Pölten | 8: Pulten | 8: Pulten | 6: Pölten |
1: Schulze | 1: Schulze | 1: Schulze | 1: Schulze | 1: Schulze |