Další Předchozí Obsah

11. České třídění

Autor informací: Jan Pazdziora adelton@fi.muni.cz, 1998

České třídění zcela podle ČSN nelze implementovat bez použití metod umělé inteligence. Norma totiž požaduje takové jemnůstky jako zařadit řetězec "Karel IV" před "Karel II", protože římské číslice se mají nahradit slovy, a "čtvrtý" je před "druhý". Třídění bez největších výstřelků ČSN zvládá knihovna glibc s nainstalovanými locales s Revision: minimálně 1.10 --- viz kapitola locales. Třídění pomocí locales v libc5 nefunguje.

Pokud váš systém nepoužívá glibc nebo nemůžete použít locales z nějakého jiného důvodu, lze použít implementaci funkce strxfrm od Jana Pazdziory, která převádí český (ISO-8859-2) text na posloupnost, kterou je potom možno porovnávat pomocí strcmp. Převod je definován tak, aby následné třídění co nejvíce odpovídal české normě (ČSN; je slovenské třídění odlišné?), resp. výkladu normy podle pana Olšáka. Soubor obsahuje také funkci strcoll, která provede porovnání dvou řetězců bez nutnosti předchozí konverze, tedy v konstantní paměti.

Soubor přeložíme příkazem


cc -c -o csort.o csort.c

a pomocí


ld -shared -o csort.so csort.o

z něj uděláme sdílenou knihovnu. Tu potom použijeme například nastavením proměnné prostředí export LD_PRELOAD=/cesta/k/csort.so, čímž zajistíme, že se místo implicitních strxfrm a strcoll použijí výše uvedené, české.

Další informace o třídění, včetně implementace třídění pro databázi MySQL (viz kapitola mysql), lze nalézt na stránce Jana Pazdziory.


Další Předchozí Obsah