Č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.