Mega Code Archive

 
Categories / Delphi / Algorithm Math
 

Convert Numbers To Hebrew

Title: Convert Numbers To Hebrew Question: How can i change my 12345 numbers to hebrew numbering style ? Answer: Well I have created long ago in the pascal days a function to do this. A few month ago i converted it to Delphi, and created a new function to do it. It's much faster then the old one... but still it is to slow (I hope you can help me to make it even faster). Note: this is a recorsive function, and also this is the first time i published it, I took it from my String unit, so it might be that there are some functions that apper only in this unit, so I'm sorry from a head :) : { Hebrew Numbers } const hZerrowToNine : array[0..9] of char = // 0 1 2 3 4 5 6 7 8 9 (#255,'','','','','','','','',''); //No Zerro in hebrew !!!! hTenToNinte : array[1..9] of char = // 10 20 30 40 50 60 70 80 90 ('','','','','','','','',''); hHandredToFour : array[1..4] of char = //100 200 300 400 ('','','',''); ///////// Inner function for the "hIntToStrNumber" function \\\\\\\\\ function Single(strNum : string) : string; begin result := hZerrowToNineNumbers[strToInt(strNum)]; end; function Tens(strNum : string) : string; begin case strNum[1] of '1' : if strNum[2] ='0' then result := hTenToNinteNumbers[strToInt(strNum[1])] else result := hZerrowToNineNumbers[StrToInt(strNum[2])] + #32 + hTeen; '2'..'9' : result := hTenToNinteNumbers[strToInt(strNum[1])]; else result := #255; end; end; function Hundreds(strNum : string) : string; begin case strNum[1] of '1', '2' : result := hHanderndToNineHandrend[StrToInt(strNum[1])]; '3'..'9' : result := hZerrowToNineNumbers[strToInt(strNum[1])] + #32 + hHundrends; else result := #255; end; end; function Thousand(strNum : string) : string; begin case strNum[1] of '1', '2' : result := hOneThousandToNineThousand[strToInt(strNum[1])]; '3'..'9' : result := hZerrowToNineNumbers[strToInt(strNum[1])]+ #32 + hThousand; else result := #255; end; end; ///////////////////////////////////////////////////////////////////// function hIntToStrNumber(Number : integer) : string; //Thanks for HU-Man for helping to fix a bug that was in this function ... var strNum : string; begin strNum:= IntToStr(Number); Case Length(strNum) of 1 : begin // 0 - 9 result := Single(strNum); end; 2 : begin // 10 - 99 result := Tens(strNum); if strNum[1] ='2' then if strNum[2]'0' then result := result + #32 + hAnd + hIntToStrNumber(StrToInt(strNum[2])); end; 3 : begin // 100 - 999 result := Hundreds (strNum); if strNum[2] '0' then if strNum[3] = '0' then result := result + #32 + hAnd + hIntToStrNumber(StrToInt(strNum[2]+strNum[3])) else result := result + #32 + hIntToStrNumber(StrToInt(strNum[2]+strNum[3])); if (strNum[2] ='0')and(strNum[3]'0') then result := result + #32 + hAnd + hIntToStrNumber(StrToInt(strNum[3])); end; 4 : begin // 1,000 - 9,999 result := Thousand(strNum); if (strNum[2] '0') then result := result + #32 + hIntToStrNumber(StrToInt(strNum[2]+strNum[3]+strNum[4])); end; else result := ''; end; result := DeleteChar(Result,#255); end;