تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
مقارنة الكلمات و الأسماء العربية برمجيا
#1
السلام عليكم ورحمة الله وبركاته

جميعنا نستخدم الكلمات العربية بحكم أصولنا العربية و لذلك سنجد أن أغلب المبرمجين يكتبون برامجا موحهه للناطقين بالعربية لذلك هناك شئ هام جدا يجب وضعه في الإعتبار حين نريد ان نكتب برامج تدعم اللغة العربية و هذا الشئ هو مقارنة الكلمات و الأسماء والحروف المكتوبة باللغة العربية للتأكد من صحتها و التأكد من ظهورها و تخزينها بالشكل الصحيح.

وفي هذا الموضوع سنناقش كيفية التأكد من صحة المدخلات المكتوبة باللغة العربية قبل حفظها أو قبل استخدامها بشكل ما مثل حفظها في برامج الداتابيز مثلا

ولتوضيح الموضوع علينا أن نفهم كيف تكتب الحروف العربية في الأصل و ماهي الحالات التي تظهر بها الحروف العربية

الحالة الأولي:

أن الحرف قد يظهر منفردا أو منعزلا وكمثال علي ذلك حرف الواو من الممكن ان يظهر هكذا (و) او حرف الألف من الممكن أن يظهر هكذا (أ) او حرف الحاء (ح) وهكذا مع بقية الحروف الأخري.

الحالة الثانية:
ان الحرف قد يكون جزء من كلمة و ربما يظهر في وسط هذه الكلمة وهنا قد يكون الحرف مقرونا بشئ اخر وكمثال علي ذلك حرف الحاء (ح) مثلا من الممكن ان يظهر هكذا ( ـــــحـــــ.) وهكذا مع بقية الحروف الأخري.


الحالة الثالثة:
أن الحرف من الممكن أن يظهر في نهاية الكلمة او تختتم به الكلمة مثل حرف الألف فهو يكتب هكذا (ـــــا) او حرف الحاء (ــــح) وهكذا مع بقية الحروف الأخري.


الحالة الرابعة:
ان الحرف يظهر في اول الكلمة مثل حرف الألف فيظهر كأنه منفردا هكذا (أ) او حرف الحاء فيظهر متصلا بشئ ما هكذا ( حــ ) وهكذا مع بقية الحروف الأخري.


ومن طريقة كتابة الحالات الاربعة للحروف ستجد اننا وحين تريد مقارنة اسما مثل محمد ستجد انه قد
يكتب هكذا ........................... محمـــــــــــــــد
أو يكتبه البعض الأخر هكذا ............ مـحـمـد

أو هكذا ............................. محمد

ومن المؤكد اننا وحين تريد مقارنة الاسم برمجيا سنكتشف انه قد يكون لدينا حالات كثيرة للكلمات او الحروف او الأسماء

الأن يأتي السؤال كيف نقارن بين كل هذه الأشكال من الكلمات برمجيا؟

حين كنت طالبا منذ فترة طويلة كنت أسمع أستاذ اللغة العربية رحمة الله عليه يردد دوما ........ عليك إرجاع الشئ لأصله  .... وهذه الكلمات وبالرغم من بساطتها فهي تمثل الاجابة الدقيقة علي السؤال الذي سألناه

و هذا هو بالضبط ما يجب أن نفعله برمجيا أي أنه علينا أن نعيد الكلمة الي أصولها او الي حروفها الاصلية او بلغة مبسطة اكثر علينا التاكد من صحة الكلمات.

سؤال أخر لماذا هذه المعاناة ولماذا يجب علينا أن نكتب هذا الكود؟

إجابة السؤال تكمن في أن الكلمات التي تدعم لغة غير الإنجليزية قد تفقد شكلها الاصلي عند حفظها في ملفات ولذلك قد تجدها تظهر علي شكل غير مفهوم للمستخدم

و ربما أفرب مثال علي ما أقوله و للتأكد من صحة كلامي ..... حاول أن تكتب قليلا من الكلمات او الحروف بالعربية في برنامج مثل NotePad و انظر ماذا سيحدث معك عندما تريد حفظ هذا الكلمات في ملف تكست عادي جدا

الكود:
لقد قمت بكتابة مصفوفة واحدة حيث يتم بها تخزين الأشكال الأساسية للحروف العربية و هذه المصفوفة يتم استخدامها لمقارنة المدخلات و من ثم التأكد من أن الكلمات متشابهة ولمزيد من الدقة من الممكن أن نضيف للمصفوفة المزيد من ألأشكال ألأخري لكيفية كتابة الحروف العربية

المصفوفة المستخدمة في مقارنة المدخلات

PHP كود :
   Public ReadOnly Property ValidCharacterRange As IEnumerable(Of Char)
 
       Get
            Dim arabicChars 
As List(Of Char) = New List(Of CharFrom {"أ""ا""ب""ت""ث""ج""ح""خ""د""ذ""ر""ز""س""ش""ص""ص""ض""ط""ظ""ع""غ""ف""ق""ك""ل""م""ن""ه""و""ي"}
 
           Return arabicChars
        End Get
    End Property 

الدالة التي تقوم بالتاكد من صحة المدخلات وهي لها شكلان

PHP كود :
Public Function ValidateString(value As String) As String
        Dim valueString 
As String CType(valueString)
 
       If Not (String.IsNullOrEmpty(ValueString)) Then
            valueString 
ValidateString(valueStringValidCharacterRange)
 
       End If
 
       Return valueString
    End 
Function

 
   Public Function ValidateString(value As StringcharacterRange As List(Of Char)) As String
        Dim sb 
= New System.Text.StringBuilder()
 
       For Each chr As Char In value
            If characterRange
.IndexOf(chr) >= 0 Then
                sb
.Append(chr)
 
           End If
 
       Next
        Return sb
.ToString()
 
   End Function 

الدالة النهائية التي تستخدم في مقارنة المدخلات

PHP كود :
  Public Function CompareArabicStrings(s1 As Strings2 As String) As Boolean
        If 
((s1 Is NothingOrElse (s2 Is Nothing)) Then
            Return 
(s1 s2)
 
       End If
 
       Return ValidateString(s1).Equals(ValidateString(s2))
 
   End Function 

كيف نستخدم الدالة لمقارنة المدخلات

PHP كود :
Dim mohamed1 As String "محمـــــد"
 
       Dim mohamed2 As String "محمـــــــد"

 
       If CompareArabicStrings(mohamed1mohamed2Then
            MessageBox
.Show(mohamed1.ToString " Equal " mohamed2.ToString)
 
       End If 

تقبلو تحياتي
وبالتوفيق للجميع
الرد }}}
تم الشكر بواسطة: hamada558 , HASAN6.0


الردود في هذا الموضوع
مقارنة الكلمات و الأسماء العربية برمجيا - بواسطة silverlight - 20-12-15, 08:53 AM

المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  مقدمة الي تشفير الحروف الأبجدية العربية silverlight 3 10,080 17-05-22, 02:23 AM
آخر رد: flawer69
  ترجمة النصوص من الإنجليزية الي العربية بين الواقع و الخيال silverlight 2 5,774 28-05-20, 05:05 AM
آخر رد: محمد ايمن
  مقارنة صورتين و الحصول علي الفرق بينهم Comparing Two Images and Get Diff Image silverlight 0 5,369 30-06-17, 11:33 AM
آخر رد: silverlight
  [VB.NET] كيفية انشاء قاعدة بيانات برمجيا VB.net (صوت وصورة) أحمد النجار 0 4,408 18-01-15, 06:59 AM
آخر رد: أحمد النجار
  تشغيل برنامجك كمدير (administration) عند العميل برمجيا على ويندوز 7 Omar Mekkawy 5 5,506 05-01-14, 03:08 AM
آخر رد: mero5000
  الصورة العربية - لآ مشقة بعد الآن في إنشاء الدروس ! RaggiTech 2 3,226 25-04-13, 12:22 PM
آخر رد: خليل اسماعيل
  رسم الباركود برمجيا باستخدام (Code128) RaggiTech 3 9,781 06-10-12, 12:51 AM
آخر رد: RaggiTech
  كيف تقوم بإضافة إجراءاتك الخاصة إلى مجال الأسماء My- توسيع مجال الأسماء My في VB2005 RaggiTech 0 2,053 05-10-12, 01:49 AM
آخر رد: RaggiTech
  توسيع مجال الأسماء My باستخدام My Extensibility RaggiTech 5 3,606 03-10-12, 12:26 PM
آخر رد: RaggiTech
  تشغيل برنامجك كمدير (administration) عند العميل برمجيا على ويندوز 7 RaggiTech 0 2,970 03-10-12, 08:47 AM
آخر رد: RaggiTech

التنقل السريع :


يقوم بقرائة الموضوع: