Jazyk 4D nabízí více než 20 příkazů pro práci s řetězci. Ve verzi 4D v18 R6 se objevuje nový příkaz: Compare strings. A ještě jeden příkaz byl vylepšen: Position. Oba tyto příkazy umožňují používat volby pro přesnější výsledky. Pojďme se dozvědět více!
HDI: Vylepšení porovnávání řetězců.
Pozice
Známý příkaz Position, umožňuje zjistit pozici textu v rámci jiného textu. Poskytuje pouze dvě možnosti: počáteční pozici a přesnou shodu na základě kódu znaku. Od verze 4D v18 R6 máte nyní k dispozici více možností porovnání, například „citlivost na velikost písmen“ nebo „citlivost na diakritiku“. Nezapomnělo se ani na japonštinu! Jako možnosti vyhledávání jsou k dispozici také Hiragana/Katakana a šířka znaků. K dispozici je také možnost vyhledávat „celé slovo“.
Začněme od začátku.
První možností je „striktní“. Bere v úvahu velká písmena, přízvuky atd. a také specifika jednotlivých jazyků. Například v němčině lze předpokládat, že „ß“ je totožné s „ss“. Ve francouzštině jsou œ a æ ekvivalentní a „oe“ a „ae“.
Ostatní dostupné možnosti hovoří samy za sebe. „case insensitive“ a „accent insensitive“ umožňují obejít akcenty a velká písmena. V případě japonštiny „kana insensitive“ ignoruje rozdíly mezi katakanou a hiraganou a „width insensitive“ ignoruje šířku znaků.
Poslední (velmi užitečná) volba umožňuje ignorovat části slov a vyhledávat pouze kompletní (celá) slova.
Několik příkladů
$p:=Position ("home"; "I have done my homework";0;$length;sk whole word")
// returns zero ! home is not a whole word in this case.
$p:=Position ("Home"; "I have done my homework";0;$length;sk case insensitive")
// returns 16; the capital "H" is considered equal to letter "h"
$p:=Position ("Joao"; "Mám kamaráda jménem João";0;$length;sk accent insensitive")
// returns 23; the accentuated letter "ã" is considered equal to letter "a"
Tyto možnosti lze kumulovat!
$p:=Position ("joao"; "Mám kamaráda jménem João";0;$délka;sk case insensitive + sk accent insensitive")
// also returns 23; the accentuated letter "ã" is considered equal to letter "a" AND letter "J" is considered equal to letter "j"
Porovnání řetězců
Nový příkaz Compare strings umožňuje porovnávat řetězce se stejnými volbami, jaké byly přidány do příkazu Position. Tento příkaz vychází z jazyka definovaného v nastavení databáze. To může být opravdu užitečné například pro povolení specifického třídění.
Příkaz vrátí:
- nula (0), pokud jsou řetězce považovány za shodné (na základě kritérií předaných jako volby).
- zápornou nebo kladnou hodnotu, pokud by byl první řetězec seřazen před nebo za druhým.
Několik příkladů
V níže uvedeném příkladu vrátí $result hodnotu „1“, protože „a“ je považováno za větší než „A“. Nikoliv svou velikostí, ale kvůli kódu znaku!
Připomínáme: sk char code činí porovnávání nezávislým na jazyku.
$result:=Compare strings("alpha"; "Alpha"; sk char codes)
Tentokrát $result vrací „0“, protože malá a velká písmena musí být díky volbě sk case insensitive považována za shodná.
Připomínka: sk case insensitive činí porovnání závislým na jazyku.
$result:=Compare strings("a tree"; "Strom"; sk case insensitive)
Závěr
Podívejte se na výše uvedený HDI a zjistěte, jak lze tyto nové možnosti použít.
Pokud potřebujete spravovat specifické vyhledávání nebo třídění ve svých datech, budou pro vás jistě velmi užitečné. Více informací o těchto příkazech najdete v dokumentaci: porovnání řetězců a pozice.
A nezapomeňte se zapojit do diskuse na fóru 4D!