
A mellékelt példaprogram megnyitása előtt az OrderByString.pas-ban lévő komponenst telepítenie kell a Delphi alá. Ehhez válassza a Component - Install Component menüpontot.
A magyar helyesírási szabályok szerint a számokat kétezerig egybe írjuk, utána kötőjellel elválasztva. 100.000-től kezdődően pedig hármas csoportonként kell kötőjelet használnunk. Az egyedik és kettedik helyett az első és második kifejezéseket használjuk.
A komponens egyetlen property-vel és függvénnyel rendelkezik. A GetOrderByString függvénnyel konvertálhatunk át egy megadott számot szöveges sorszámnévre.
function GetOrderByString(Num: Integer): String;
Ha a StartWithUCase property értéke igaz, akkor a visszakapott eredmény első betűje nagy lesz, hamis érték esetén pedig kicsi.
A sorszámnevek szöveges írásánál valamiféle közös algoritmust kell találnunk a számok szöveges megjelenítésére. A 0,1,2,100,1000 számok ragozása rendhagyó, továbbá kezelnünk kell a negatív számokat is.
Feldolgozás során az 1-9 számokhoz egy-egy tömb segítségével szöveges elnevezéseket rendelhetünk, ragozott és ragozatlan formában, egyes tízes és százas nagyságrendekben. Az e és t tömbök a számok ragozatlan neveit tartalmazzák egyes és tízes nagyságrendben. Az edik, tdik, szdik tömbök a ragozott sorszámneveket tartalmazzák.
A konvertáló függvény bemenő paramétere Integer ami azt jelenti, hogy a –2147483648. . .2147483647 intervallum számait kell lefednünk.
A konvertáló függvény lényege, hogy a legnagyobb nagyságrendtől kezdve az egyesek felé haladunk és úgy építjük fel a szöveges sorszámnevet.
A Szoveg nevű változóban tároljuk el a sorszámnév szöveges megfelelőkét. A változó tartalmát, elindulva a milliárdos nagyságrendtől kezdve, folyamatosan bővítjük.
Ha a paraméterben megadott szám mínusz, akkor a Szoveg változót a mínusz szóval kezdjük, majd a további feldolgozás során a szám abszolút értékével dolgozunk.
Minden egyes nagyságrendnél, a Seged változóban tároljuk el azt a számot, amely az adott nagyságrendet képviseli. Ezt úgy kapjuk meg, hogy a fennmaradó számot egészértékű osztással osztjuk, a megadott nagyságrenddel. Osztás után a kapott eredménnyel visszaszorzunk és az így kapott számot kivonjuk a kezdeti számból. Az alábbi példa a milliárdos nagyságrendet meghatározó számokat határozza meg.
Seged:=Num div 1000000000;
SegedS:=IntToStr(Seged);
Num:=Num-Seged*1000000000;
A Num változó tehát mindig azt a számot fogja tárolni, amelyet tovább kell majd bontanunk. A SegedS változóba a szám szöveges módban kerül tárolásra. Erre azért van szükségünk, hogy az egyes helyi értékeken lévő számokat könnyen meg tudjuk határozni.
A milliárdos nagyságrendben szerencsések vagyunk, mert az Integer értéktartományából adódóan maximum csak 2 milliárdig kell számolnunk.
Bonyolítja a helyzetet, hogy a milliós és az ezres kategóriában egy szám egy, kettő vagy három számjegyből állhat. Pl.: 6 ezer, 10 ezer, 578 ezer.
A feldolgozást, ennek megfelelően több részre kell bontanunk. Külön kell választanunk az egy-, kettő- és a háromjegyű számokat. Meg kell vizsgálnunk azt is, hogy az egyes esetekben milyen ragozású sorszámneveket kell használnunk.
A példa kedvéért elemezzük az ezres nagyságrendhez tartozó számításokat.
Alapvetően 3 csoportba kell sorolnunk a feldolgozást, attól függően, hogy az ezres összetevő hány jegyű. Vizsgáljuk meg azt az esetet, amikor az összetevő kétjegyű, azaz 10-99.
if (Seged>=10) and (Seged<100) then begin
Ha a Num változóban lévő maradék 0, az azt jelenti, hogy a sorszámnevet az X-edik módon kell megadnunk. Ha num tartalma nagyobb mint 0, akkor még további számokat kell majd feldolgoznunk.
Az olyan esetben, amikor az összetevő egy átlagos szám, pl.: 12, akkor az alábbi módon kell eljárnunk. A számok neveit a tizen és az e tömbökből kell kiolvasnunk.
if (Seged>10) and (SegedS[2]>'0') and (Num=0) then
Szoveg:=Szoveg+tizen[StrToInt(SegedS[1])]+e[StrToInt(SegedS[2])]+'ezredik';
Ha a szám kerek tízes, akkor a feldolgozás során a t tömb elemeit kell felhasználnunk.
if (Seged>=10) and (SegedS[2]='0') and (Num=0) then
Szoveg:=Szoveg+t[StrToInt(SegedS[1])]+'ezredik';
Ha nincs maradék a Num változóban, akkor másképp kell befejeznünk a sorszám ragozását, hiszen további elemeket kell még majd hozzáírnunk a Szoveg változóhoz.
if (Seged>=10) and (SegedS[2]>'0') and (Num>0) then
Szoveg:=Szoveg+tizen[StrToInt(SegedS[1])]+e[StrToInt(SegedS[2])]+'ezer';
Az alábbi kódot abban az esetben kell használnunk, amikor van maradék és csak tízesekkel kell számolnunk.
if (Seged>=10) and (SegedS[2]='0') and (Num>0) then
Szoveg:=Szoveg+t[StrToInt(SegedS[1])]+'ezer';
A számolási algoritmus végén figyelembe kell vennünk, hogy az első betűt kicsi vagy nagy karakterrel kell írnunk.