:D
الأخوان الكرام
لقد انتهيت من عمل كود بالـPL/SQL
يقوم بتحويل الأرقام (1234.12)
إلى حروف (الف ومائتان واربعة وثلاثون و إثنا عشر جزء من المائة)
ويمكنه قراءة الارقام من 1234567890123456789- وحتى 1234567890123456789+
========
وشكراً للجميع
:D
الأخوان الكرام
لقد انتهيت من عمل كود بالـPL/SQL
يقوم بتحويل الأرقام (1234.12)
إلى حروف (الف ومائتان واربعة وثلاثون و إثنا عشر جزء من المائة)
ويمكنه قراءة الارقام من 1234567890123456789- وحتى 1234567890123456789+
========
وشكراً للجميع
مشاء الله جهد مبارك والله يقويك وينالفريق العربي للبرمجةك الإسلام والمسلمين .
والله الله بشغل الزين والإبداع والى الأمام ودعواتنا معك .
كيف أحصل عليه ؟؟
اخي العزيز ارنب
تحياتي لك وشكري العكيق على مجهودك في تحويل الارقام وكن لم تكمل كلامك , وياريت لو تضع لنا الكود الخاص بهذه العملية في الموقع او تبعثه على الايميل ولكن افضل ان تضعه كمشاركه لتعم الفائدة
وشكرا لك
والى الامام
شكراً أخي العزيز على هذا الجهد الرائع و أرجو أن ترسل لي بلكود على العنوان التالي
وجزاك الله خيراُ
أتمنى من الجميع الأستفادة من هذا الكود فلقد اجتهدت في عمله حتى يمكن استخدامة في جميع الامكان
فهو يتعامل مع اربع باروميترات وهي الرقم و العملة و اسم جزء العمله و حالة إظهار الكسور واللغة
فشكل الوظيفة على النحو التالي
Num_ar( A,B,C,D,F)1
A = الرقم وهو من 123456789123456789- إلى 12345678912345679
B= اسم العملة ريال سعودي أو دينار او جنيه وإذا لم يتم وضعها سوف تأخذ قيمة ريال يمني
C=اسم جزء العملة والقيمة الافتراضية قرش
D= كيفية إظهار الكسور رقماُ او تفنيط ويأخذ المعامل 1 للتفنيط أو 0 للرقم والقيمة الافترصية 0
F= تمثل لغة الاخراج وحتى الآن تدعم لغتان العربية والانجليزية وإذا لم تضع تـأخذ ا لغة العربية
أتمنى من الجميع تجربته وأخباري في حالة وجود مشاكل على الايميل u4_13@hotmail.com
وأعتذر عن حجم الكود فلقد حاولة تصغيرة قدر الامكان ولكن جمع الكثير من الوظائف جعله يطول
ولا تنسو دعوه صالحة لأخيكم تنفعه في يوم لا ينفع فيه مال ولا بنون
-- بسم الله الرحمن الرحيم
create or replace function Num_ar (P_inp_num in NUmber,v_ce in varchar2 DEFAULT 'ريال يمني',v_de in varchar2 DEFAULT 'قرش',v_det in number DEFAULT 0,v_lan in varchar2 DEFAULT 'AR')
return Varchar2 as
-- Functions called : D3_To_Word
L_Return Varchar2(1000);
-- Nayif Salim Alhamed u4_13@hotmail.com
m Number := 0;
V_inp_Num Number := 0;
V_inp_Int Number := 0;
V_inp_dec Number := 0;
V_Char Varchar2(100);
V_Temp Number := 0;
Type LionArray is table of Varchar2(500);
In_str LionArray := LionArray ( '',
' آلف ', ' مليون ' , ' مليار ' , ' ترليون ' ,' فرليون ' , ' سرسليون ' , ' تسرسليون ' , ' فيمتون ' );
-- ENGLSH VARIBLE
eL_Return Varchar2(1000);
em Number := 0;
eV_inp_Num Number := 0;
eV_inp_Int Number := 0;
eV_inp_dec Number := 0;
eV_Char Varchar2(100);
eV_Temp Number := 0;
Type eLionArray is table of Varchar2(500);
eIn_str eLionArray :=
eLionArray ( '',
'Thousand ' ,
'Million ' ,
'Billion ' ,
'Trillion ' ,
'Quadrillion ' ,
'Quintillion ' ,
'Sextillion ' ,
'Septillion ' ,
'Octillion ' ,
'Nonillion ' ,
'Decillion ' ,
'Undecillion ' ,
'Duodecillion ');
-- Function
function D3_To_Wordar (P1_number in number)
return varchar2 as
-- Pass only three digits
-- This function return word equivalent to its number
-- Accepted values are 0 to 999
L1_Return2 varchar2(500) := NULL;
n1 Number := 0;
i1 Number := 0;
j1 Number := 0;
k1 Number := 0;
V1_inp_Number Number := 0;
V1_temp Varchar2(50) := NULL;
type OneArray is table of varchar2(50);
type TenArray is table of varchar2(50);
type hanArray is table of varchar2(50);
OneStr OneArray := OneArray('واحد', 'إثنان ', 'ثلاثة', 'أربعة', 'خمسة', 'ستة', 'سبعة', 'ثمانية', 'تسعة', 'عشرة', 'إحدىعشر', 'إثناعشر', 'ثلاثة عشر', 'أربعة عشر', 'خمسة عشر', 'ستة عشر', 'سبع عشر', 'ثمانية عشر', 'تسع عشر');
TenStr TenArray := TenArray('', 'عشرون', 'ثلاثون', 'أربعون' , 'خمسون', 'ستون', 'سبعون','ثمانون', 'تسعون');
hanStr hanArray := hanArray('مائة', 'مائتان', 'ثلاثمائة' , 'أربعمائة', 'خمسمائة', 'ستمائة','سبعمائة', 'ثمانمائة','تسعمائة');
BEGIN
V1_inp_Number := P1_Number;
if V1_inp_number > 999 then
V1_inp_number := 0;
end if;
V1_temp := LPAD(to_char(V1_inp_number),3,0);
-- Find Hundredth position
n1 := to_number(substr(V1_temp,1,1));
if n1 > 0 then L1_Return2 := hanStr(n1);
end if;
i1 := to_number(substr(V1_temp,2,2));
j1 := to_number(substr(V1_temp,2,1));
k1 := to_number(substr(V1_temp,3,1));
if n1>0 AND (j1>0 OR k1>0) then L1_Return2 := L1_Return2 ||' و';
End if;
if i1 > 0 and i1 < 20 then L1_Return2 :=L1_Return2 || OneStr(i1);
END IF;
if j1 >= 2 then
if k1 > 0 then
L1_Return2 := L1_Return2|| OneStr(k1)|| ' و';
end if;
L1_Return2 := L1_Return2 || TenStr(j1);
end if;
if V1_inp_number=0 Then L1_Return2:='صفر';
End If;
Return L1_Return2;
END D3_To_Wordar;
-- another function
function Digits3_To_Word (P_number in number)
return varchar2 as
-- Pass only three digits
-- This function return word equivalent to its number
-- Accepted values are 0 to 999
--
L_Return2 varchar2(500) := NULL;
i Number := 0;
j Number := 0;
k Number := 0;
V_inp_Number Number := 0;
V_temp Varchar2(50) := NULL;
type OneArray is table of varchar2(50);
type TenArray is table of varchar2(50);
OneStr OneArray := OneArray('One ',
'Two ',
'Three ',
'Four ',
'Five ',
'Six ',
'Seven ',
'Eight ',
'Nine ',
'Ten ',
'Eleven ',
'Twelve ',
'Thirteen ',
'Fourteen ',
'Fifteen ',
'Sixteen ',
'Seventeen ',
'Eighteen ',
'Nineteen ');
TenStr TenArray := TenArray('',
'Twenty ',
'Thirty ',
'Forty ' ,
'Fifty ',
'Sixty ',
'Seventy ',
'Eighty ',
'Ninety ');
BEGIN
V_inp_Number := P_Number;
if V_inp_number > 999 then
V_inp_number := 0;
end if;
V_temp := LPAD(to_char(V_inp_number),3,0);
-- Find Hundredth position
i := to_number(substr(V_temp,1,1));
if i > 0 then
L_Return2 := OneStr(i)||'Hundred ';
end if;
-- Find last 2 digits
i := to_number(substr(V_temp,2,2));
j := to_number(substr(V_temp,2,1));
k := to_number(substr(V_temp,3,1));
if i > 0 and i < 20 then
L_Return2 := L_Return2 || OneStr(i);
end if;
if j >= 2 then
L_Return2 := L_Return2 || TenStr(j);
if k > 0 then
L_Return2 := L_Return2|| OneStr(k);
end if;
end if;
Return L_Return2;
END Digits3_To_Word;
Begin
IF v_lan ='AR' Then
V_inp_Num := ABS(P_inp_Num);
V_inp_Int := Trunc(V_inp_Num);
V_inp_Dec := V_inp_Num - V_inp_Int;
-- To abort to 100
if V_inp_Dec > 0 then
V_inp_dec := V_inp_dec * 100;
V_inp_Dec := to_number(substr(to_char(V_inp_Dec),1,2));
end if;
V_char := to_char(V_inp_Int);
for m in 1..In_Str.Count Loop Exit when V_char is NULL;
V_Temp := To_Number(Substr(V_char,(Length(V_char)-2), 3));
if V_temp > 0 then
L_Return := D3_To_WordAR(V_Temp) || In_str(m)||' و' || L_Return;
end if;
V_char := Substr(V_char,1,(Length(V_Char)-3));
End Loop;
L_return :=Substr(L_return,1,(Length(L_return)-1));
IF P_inp_num>=1000 and P_inp_num<2000 Then L_return:=Substr(L_return,5,Length(L_return));
End if;
IF P_inp_num>=2000 and P_inp_num<3000 Then L_return:='الفان'||Substr(L_return,11,Length(L_return));
End if;
IF P_inp_num>=3000 and P_inp_num<=10000 Then
L_return:=Substr(L_return,1,(INSTR(L_return,'آلف')-1)) || 'الآف' || Substr(L_return,(INSTR(L_return,'آلف')+3),Length(L_return));
End if;
if v_det=1 then
if V_inp_Dec > 0 then
L_return := L_return ||v_ce||' و' || to_char(V_inp_Dec)||v_de;
ELSE L_return := L_return ||' '||v_ce;
end if;
Else
if V_inp_Dec > 0 then
L_return := L_return ||v_ce||' و' ||D3_To_WordAR(V_inp_Dec)||' '||v_de;
ELSE L_return := L_return ||' '||v_ce;
end if;
End if;
if V_inp_Int > 0 then
L_Return := L_Return;
elsif V_inp_Int = 0 then
L_return := '===';
end if;
Return L_return;
ELSE
if P_inp_num < 0 then
eV_inp_Num := (P_inp_Num * -1);
else
eV_inp_Num := P_inp_Num;
end if;
eV_inp_Int := Trunc(eV_inp_Num);
eV_inp_Dec := eV_inp_Num - eV_inp_Int;
if eV_inp_Dec > 0 then
eV_inp_dec := eV_inp_dec * 100;
eV_inp_Dec := to_number(substr(to_char(eV_inp_Dec),1,2));
end if;
eV_char := to_char(eV_inp_Int);
for em in 1..eIn_Str.Count Loop
exit when eV_char is NULL;
eV_Temp := To_Number(Substr(eV_char,(Length(eV_char)-2), 3));
if eV_temp > 0 then
eL_Return := Digits3_To_Word(eV_Temp) || eIn_str(em) || eL_Return;
end if;
eV_char := Substr(V_char,1,(Length(eV_Char)-3));
End Loop;
if eV_inp_Int > 0 then
eL_Return := v_ce||' '||eL_Return ||' and ';
elsif eV_inp_Int = 0 then
eL_return := v_ce||' Zero and ';
end if;
-- Concatenate the word for decimal digits
if v_det=1 then
if eV_inp_Dec > 0 then
eL_return := eL_return || Digits3_To_Word(eV_inp_Dec) ||' '||v_de;
elsif eV_inp_Dec = 0 then
eL_Return := eL_return ||' Zero '||v_de;
End if;
ELSE
if eV_inp_Dec > 0 then
eL_return := eL_return || to_char(eV_inp_Dec) ||' '||v_de;
elsif eV_inp_Dec = 0 then
eL_Return := eL_return ||' Zero '||v_de;
End if;
END if;
Return eL_return;
End IF;
END Num_AR;لم يظهر الكود بالشكل المطلوب
ولا ادري لماذا
يمكن التحميل :)
مشكور يا اخ ارنب على المشاركة وياريت تستمر معنا في الموقع وماتكون زيارتك عابرة
واعتقد ان اغلب من يشارك في الموقع هدفه هوه ان يفيد اخوانه وكما قلت ان يلقى كلمة شكر او دعوى حسنه تنفعه يوم لا ينفع شي
وان يكون ممن تعلم العلم وعلمه
وجزاك الله كل خير يا اخي
أرجو من الأخوة تجربت الكود وأخباري في حالة وجود أي مشاكل فيه
سواً بإرسال ايميل أو بتعليق هنا
وشكراً للجميع
الملف إذا حملته يطلع فاضي مافية شي واذا نسخت الكود من فوق يطلع فيه أخطاء .
ممكن تحط الملف من جديد!!!!!!
هذا الكود من جديد وقد جعلت على أنه PHP
مع أنه كود PL SQL وتم وضع PHP فقط للإظهار
أتمنى أن يتم تجربته فلقد اضفت إليه بعض التعديلات
وشكراً لجميع الأخون (gift)
create or replace function Num_ar (P_inp_num in NUmber,v_ce in varchar2 DEFAULT 'ريال يمني',v_de in varchar2 DEFAULT 'قرش',v_det in number DEFAULT 0,v_lan in varchar2 DEFAULT 'AR')
return Varchar2 as
-- أتمنى أن ينفع به المسلمين ولا تحرمونا من دعائكم
-- Functions called : D3_To_Word
-- Maded By Naif Salim Al hamed In 1-7-2002 email u4_13@hotmail.com
L_Return Varchar2(1000);
m Number := 0;
V_inp_Num Number := 0;
V_inp_Int Number := 0;
V_inp_dec Number := 0;
V_Char Varchar2(100);
V_Temp Number := 0;
Type LionArray is table of Varchar2(500);
In_str LionArray := LionArray ( '',
' آلف ', ' مليون ' , ' مليار ' , ' ترليون ' ,' فرليون ' , ' سرسليون ' , ' تسرسليون ' , ' فيمتون ' );
-- ENGLSH VARIBLE
eL_Return Varchar2(1000);
em Number := 0;
eV_inp_Num Number := 0;
eV_inp_Int Number := 0;
eV_inp_dec Number := 0;
eV_Char Varchar2(100);
eV_Temp Number := 0;
Type eLionArray is table of Varchar2(500);
eIn_str eLionArray :=
eLionArray ( '',
'Thousand ' ,
'Million ' ,
'Billion ' ,
'Trillion ' ,
'Quadrillion ' ,
'Quintillion ' ,
'Sextillion ' ,
'Septillion ' ,
'Octillion ' ,
'Nonillion ' ,
'Decillion ' ,
'Undecillion ' ,
'Duodecillion ');
-- Function
function D3_To_Wordar (P1_number in number)
return varchar2 as
-- Pass only three digits
-- This function return word equivalent to its number
-- Accepted values are 0 to 999
L1_Return2 varchar2(500) := NULL;
n1 Number := 0;
i1 Number := 0;
j1 Number := 0;
k1 Number := 0;
V1_inp_Number Number := 0;
V1_temp Varchar2(50) := NULL;
type OneArray is table of varchar2(50);
type TenArray is table of varchar2(50);
type hanArray is table of varchar2(50);
OneStr OneArray := OneArray('واحد', 'إثنان ', 'ثلاثة', 'أربعة', 'خمسة', 'ستة', 'سبعة', 'ثمانية', 'تسعة', 'عشرة', 'إحدىعشر', 'إثناعشر', 'ثلاثة عشر', 'أربعة عشر', 'خمسة عشر', 'ستة عشر', 'سبع عشر', 'ثمانية عشر', 'تسع عشر');
TenStr TenArray := TenArray('', 'عشرون', 'ثلاثون', 'أربعون' , 'خمسون', 'ستون', 'سبعون','ثمانون', 'تسعون');
hanStr hanArray := hanArray('مائة', 'مائتان', 'ثلاثمائة' , 'أربعمائة', 'خمسمائة', 'ستمائة','سبعمائة', 'ثمانمائة','تسعمائة');
BEGIN
V1_inp_Number := P1_Number;
if V1_inp_number > 999 then
V1_inp_number := 0;
end if;
V1_temp := LPAD(to_char(V1_inp_number),3,0);
-- Find Hundredth position
n1 := to_number(substr(V1_temp,1,1));
if n1 > 0 then L1_Return2 := hanStr(n1);
end if;
i1 := to_number(substr(V1_temp,2,2));
j1 := to_number(substr(V1_temp,2,1));
k1 := to_number(substr(V1_temp,3,1));
if n1>0 AND (j1>0 OR k1>0) then L1_Return2 := L1_Return2 ||' و';
End if;
if i1 > 0 and i1 < 20 then L1_Return2 :=L1_Return2 || OneStr(i1);
END IF;
if j1 >= 2 then
if k1 > 0 then
L1_Return2 := L1_Return2|| OneStr(k1)|| ' و';
end if;
L1_Return2 := L1_Return2 || TenStr(j1);
end if;
if V1_inp_number=0 Then L1_Return2:='صفر';
End If;
Return L1_Return2;
END D3_To_Wordar;
-- another function
function Digits3_To_Word (P_number in number)
return varchar2 as
-- Pass only three digits
-- This function return word equivalent to its number
-- Accepted values are 0 to 999
--
L_Return2 varchar2(500) := NULL;
i Number := 0;
j Number := 0;
k Number := 0;
V_inp_Number Number := 0;
V_temp Varchar2(50) := NULL;
type OneArray is table of varchar2(50);
type TenArray is table of varchar2(50);
OneStr OneArray := OneArray('One ',
'Two ',
'Three ',
'Four ',
'Five ',
'Six ',
'Seven ',
'Eight ',
'Nine ',
'Ten ',
'Eleven ',
'Twelve ',
'Thirteen ',
'Fourteen ',
'Fifteen ',
'Sixteen ',
'Seventeen ',
'Eighteen ',
'Nineteen ');
TenStr TenArray := TenArray('',
'Twenty ',
'Thirty ',
'Forty ' ,
'Fifty ',
'Sixty ',
'Seventy ',
'Eighty ',
'Ninety ');
BEGIN
V_inp_Number := P_Number;
if V_inp_number > 999 then
V_inp_number := 0;
end if;
V_temp := LPAD(to_char(V_inp_number),3,0);
-- Find Hundredth position
i := to_number(substr(V_temp,1,1));
if i > 0 then
L_Return2 := OneStr(i)||'Hundred ';
end if;
-- Find last 2 digits
i := to_number(substr(V_temp,2,2));
j := to_number(substr(V_temp,2,1));
k := to_number(substr(V_temp,3,1));
if i > 0 and i < 20 then
L_Return2 := L_Return2 || OneStr(i);
end if;
if j >= 2 then
L_Return2 := L_Return2 || TenStr(j);
if k > 0 then
L_Return2 := L_Return2|| OneStr(k);
end if;
end if;
Return L_Return2;
END Digits3_To_Word;
Begin
IF v_lan ='AR' Then
V_inp_Num := ABS(P_inp_Num);
V_inp_Int := Trunc(V_inp_Num);
V_inp_Dec := V_inp_Num - V_inp_Int;
-- To abort to 100
if V_inp_Dec > 0 then
V_inp_dec := V_inp_dec * 100;
V_inp_Dec := to_number(substr(to_char(V_inp_Dec),1,2));
end if;
V_char := to_char(V_inp_Int);
for m in 1..In_Str.Count Loop Exit when V_char is NULL;
V_Temp := To_Number(Substr(V_char,(Length(V_char)-2), 3));
if V_temp > 0 then
L_Return := D3_To_WordAR(V_Temp) || In_str(m)||' و' || L_Return;
end if;
V_char := Substr(V_char,1,(Length(V_Char)-3));
End Loop;
L_return :=Substr(L_return,1,(Length(L_return)-1));
IF P_inp_num>=1000 and P_inp_num<2000 Then L_return:=Substr(L_return,5,Length(L_return));
End if;
IF P_inp_num>=2000 and P_inp_num<3000 Then L_return:='الفان'||Substr(L_return,11,Length(L_return));
End if;
IF P_inp_num>=3000 and P_inp_num<=10000 Then
L_return:=Substr(L_return,1,(INSTR(L_return,'آلف')-1)) || 'الآف' || Substr(L_return,(INSTR(L_return,'آلف')+3),Length(L_return));
End if;
if v_det=1 then
if V_inp_Dec > 0 then
L_return := L_return ||v_ce||' و' || to_char(V_inp_Dec)||v_de;
ELSE L_return := L_return ||' '||v_ce;
end if;
Else
if V_inp_Dec > 0 then
L_return := L_return ||v_ce||' و' ||D3_To_WordAR(V_inp_Dec)||' '||v_de;
ELSE L_return := L_return ||' '||v_ce;
end if;
End if;
if V_inp_Int > 0 then
L_Return := L_Return;
elsif V_inp_Int = 0 then
L_return := '===';
end if;
Return L_return;
ELSE
if P_inp_num < 0 then
eV_inp_Num := (P_inp_Num * -1);
else
eV_inp_Num := P_inp_Num;
end if;
eV_inp_Int := Trunc(eV_inp_Num);
eV_inp_Dec := eV_inp_Num - eV_inp_Int;
if eV_inp_Dec > 0 then
eV_inp_dec := eV_inp_dec * 100;
eV_inp_Dec := to_number(substr(to_char(eV_inp_Dec),1,2));
end if;
eV_char := to_char(eV_inp_Int);
for em in 1..eIn_Str.Count Loop
exit when eV_char is NULL;
eV_Temp := To_Number(Substr(eV_char,(Length(eV_char)-2), 3));
if eV_temp > 0 then
eL_Return := Digits3_To_Word(eV_Temp) || eIn_str(em) || eL_Return;
end if;
eV_char := Substr(V_char,1,(Length(eV_Char)-3));
End Loop;
if eV_inp_Int > 0 then
eL_Return := v_ce||' '||eL_Return ||' and ';
elsif eV_inp_Int = 0 then
eL_return := v_ce||' Zero and ';
end if;
-- Concatenate the word for decimal digits
if v_det=1 then
if eV_inp_Dec > 0 then
eL_return := eL_return || Digits3_To_Word(eV_inp_Dec) ||' '||v_de;
elsif eV_inp_Dec = 0 then
eL_Return := eL_return ||' Zero '||v_de;
End if;
ELSE
if eV_inp_Dec > 0 then
eL_return := eL_return || to_char(eV_inp_Dec) ||' '||v_de;
elsif eV_inp_Dec = 0 then
eL_Return := eL_return ||' Zero '||v_de;
End if;
END if;
Return eL_return;
End IF;
END Num_AR;
/بشروا اشتغل ولا لا:confused:
السلام عليكم ورحمة الله وبركاته
احسنت ومشكور وجزاك الله خيرا على هذا الجهد الرائع وارجو ان تستمر في العطاء ، لقد اشتغلت الدالة واختبرتها ببعض الأرقام وأعطت نتائج صحيحة، فوفقك الله لما يحبه ويرضاه وجزاك الله الخير الكثير.
تسلم يا ابو سلمان
إذا فيه اي مشاكل أو ملاحظات ارجو ابلاغي
مع جزيل الشكر
بيعترض على OF الموجودة في هذه الجملة مو راضي يقبلها
type OneArray is table of varchar2(50
السلام عليكم ورحمة الله وبركاته
جزاك الله
كيف اشغل هذه الداله
وممكن ياخوه شرح هذه الداله لانى مبدأ
جزاك الله خير أخي الفاضل ..
(f)(f)(f)(f)
ياجماعه من مدة طويله وانا احاول في هذه الداله تشتغل لكن مارضت تضبط معي !!! وش الحل يا شباب
ياليت اللي ضبط معاه الكود يعمله لنا في فورم بسيط كمثال يحتوي على عنصرين TextItem & DisplayItem
لكي نعمل عليه وجزاكم الله خير ويعطيكم العافية
اناشد الاخ ابو سلمان ,,,,
انت قلت ان الداله اشتغلت معاك ياليت اخوي تعطينا فورم كمثال وجزاك الله الف خير ,.,,,
للرفع
up
اين الكود يا ارنب بارك الله فيك ؟
هذا الموضوع مغلق.
المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية
جارٍ التحقق من المتواجدين…