بسم الله الرحمن الرحيم
وصلى الله على محمد وآله الطاهرين
السلام عليكم ورحمة الله وبركاته
سنتعلم في هذا الموضوع كيفية تحويل الارقام الانكليزية الى ارقام عربية وايضا كيفية تحول الرقم الى صيغة معينة كالاسعار بالتحديد
وصلى الله على محمد وآله الطاهرين
السلام عليكم ورحمة الله وبركاته
سنتعلم في هذا الموضوع كيفية تحويل الارقام الانكليزية الى ارقام عربية وايضا كيفية تحول الرقم الى صيغة معينة كالاسعار بالتحديد
في البدابة أنشيء مشروع جديد من نوع Class Library سواء كنت مبرمج VB او #C , سم المشروع بأسم EnNumToArNum
الان من الـ Solution Explorer غير اسم الـClass1 الى EnToAr
اولا اضف مجالات الاسماء التالية:
#C
PHP كود :
using System;
using System.Globalization;
using System.Text;
VB
PHP كود :
Imports System
Imports System.Globalization
Imports System.Text
ثم اضف الدالة التالية:
#C
PHP كود :
private static string Choosing(string ch, double input,IFormatProvider culture)
{
var output = new StringBuilder();
var nums = ch == "1" ? input.ToString(CultureInfo.InvariantCulture) : input.ToString("C", culture);
foreach (var c in nums)
{
if (char.IsDigit(c))
{
for (var i = 0; i < EnDigits.Length; i++)
{
if (c != EnDigits[i]) continue;
output.Append(ArDigits[i]);
}
}
else
{
output.Append(c);
}
}
return output.ToString();
}
VB
PHP كود :
Private Shared Function Choosing(ch As String, input As Double, culture As IFormatProvider) As String
Dim output = New StringBuilder()
Dim nums = If(ch = "1", input.ToString(), input.ToString("C", culture))
For Each c In nums
If Char.IsDigit(c) Then
For i As Integer = 0 To EnDigits.Length - 1
If c <> EnDigits(i) Then
Continue For
End If
output.Append(ArDigits(i))
Next
Else
output.Append(c)
End If
Next
Return output.ToString()
End Function
شرح الكود:
في البداية يتم تعريف متغير من الفئة StringBuilder
ثم يتم المقارنة هل المتغير ch المرسل من قبل الدالتين 1 أم 2؟
اذا 1 أي يتم تحويل الرقم الى رقم عربي بدون تغيير صيغة الرقم (يعني بدون تحويلها الى صيغة السعر)
اذا 2 أي يتم تحويل الرقم الى رقم عربي مع تغيير صيغة الرقم الى صيغة سعر طبعا في هذه الحالة المستخدم سوف يختار صيغة السعر حسب دولته كما سنرى لاحقا
والوظيفة الرئيسية لهذه الدالة هي المقارنة بين الرقم (الانكليزي) المدخل مع الرقم الانكليزي المخزون في المتغير EnDigit وبالتالي يتم جلب الرقم العربي من المتغير ArDigit عن طريق موقع الرقم الانكليزي في المتغير EnDigit
توضيح:
فرضا المدخل يحتوي على الرقم 2 لذا حسب الترتيب فان موقع الرقم 2 هي 2 لذا سيتم المقارنة بالشكل التالي
PHP كود :
Endigi[2]=='2'
output+=ArDigit[2]
وأخيرا أضف دالتين بنفس الاسم بالشكل التالي:
#C
PHP كود :
public static string EnToArNumber(double input)
{
return Choosing("1", input, null);
}
public static string EnToArNumber(double input, CultureInfo culture)
{
return Choosing("2", input, culture);
}
VB
PHP كود :
Public Shared Function EnToArNumber(input As Double) As String
Return Choosing("1", input, Nothing)
End Function
Public Shared Function EnToArNumber(input As Double, culture As CultureInfo) As String
Return Choosing("2", input, culture)
End Function
الى هنا وبفضل الله انتهينا من عمل ملف DLL ,الان اعمل Build للمشروع وسينتج ملف باسم EnNumToArNum.dll في مخرجات المشروع
طريقة استخدام الملف:
طبعا افتح مشروع جديد من نوع Windows Application وسمه ما شئت سواء كنت مبرمج #C او VB
ثم اضف ملف الـdll عن طريق الـSolution Explorer ثم كلك يمين على اسم المشروع ولي على اسم الSolution ومن ثم AddReference
بعد ما تضيف الملف أضفه الى الكود بالشكل التالي:
#C
PHP كود :
usingr EnNumToArNum;
اما لمبرمجي VB فلا يحتاج اضافة مجال الاسماء الى الكود ,على كل حال يكون بهذه الطريقة:
VB
كود :
Imports EnNumToArNum
أما طريقة استخدام الدالة
اولا: بدون تحويل الرقم الى صيغة السعر:
#C
كود :
colotxtTotalPrice.Text = EnToAr.EnToArNumber(44556);
VB
كود :
txtTotalPrice.Text = EnToAr.EnToArNumber(112434)
ثانيا: تحويل الرقم مع تحديد صيغة السعر حسب البلد
#C
كود :
ctxtTotalPrice.Text = EnToAr.EnToArNumber(99777,newCultureInfo("AR-IQ"));
VB
كود :
txtTotalPrice.Text = EnToAr.EnToArNumber(345533, New CultureInfo("AR-IQ"))
طبعا ملاحظة اخيرة لم أضف المتغيرات العامة لان الاعدادات في المنتدى لا يقبل الارقام العربية
في انتظار ملاحظاتكم ولا تنسوني و والدي من صالح دعواتكم
ملف الـ dll في المرفقات