2006. február 9., csütörtök
Convert Numbers To Hebrew
Problem/Question/Abstract:
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;
Feliratkozás:
Megjegyzések küldése (Atom)
Nincsenek megjegyzések:
Megjegyzés küldése