Validating arabic strings for equality compare
جميعنا نستخدم
الكلمات العربية بحكم أصولنا العربية و لذلك سنجد أن أغلب المبرمجين يكتبون
برامجا موحهه للناطقين بالعربية لذلك هناك شئ هام جدا يجب وضعه في
الإعتبار حين نريد ان نكتب برامج تدعم اللغة العربية و هذا الشئ هو مقارنة
الكلمات و الأسماء والحروف المكتوبة باللغة العربية للتأكد من صحتها و
التأكد من ظهورها و تخزينها بالشكل الصحيح.
وفي هذا الموضوع سنناقش كيفية التأكد من صحة المدخلات المكتوبة باللغة العربية قبل حفظها أو قبل استخدامها بشكل ما مثل حفظها في برامج الداتابيز مثلا
ولتوضيح الموضوع علينا أن نفهم كيف تكتب الحروف العربية في الأصل و ماهي الحالات التي تظهر بها الحروف العربية
الحالة الأولي
أن الحرف قد يظهر منفردا أو منعزلا وكمثال علي ذلك حرف الواو من الممكن ان يظهر هكذا (و) او حرف الألف من الممكن أن يظهر هكذا (أ) او حرف الحاء (ح) وهكذا مع بقية الحروف الأخري
الحالة الثانية
ان الحرف قد يكون جزء من كلمة و ربما يظهر في وسط هذه الكلمة وهنا قد يكون الحرف مقرونا بشئ اخر وكمثال علي ذلك حرف الحاء (ح) مثلا من الممكن ان يظهر هكذا ( ـــــحـــــ.) وهكذا مع بقية الحروف الأخري
الحالة الثالثة
أن الحرف من الممكن أن يظهر في نهاية الكلمة او تختتم به الكلمة مثل حرف الألف فهو يكتب هكذا (ـــــا) او حرف الحاء (ــــح) وهكذا مع بقية الحروف الأخري
الحالة الرابعة
أن الحرف يظهر في اول الكلمة مثل حرف الألف فيظهر كأنه منفردا هكذا (أ) او حرف الحاء فيظهر متصلا بشئ ما هكذا ( حــ ) وهكذا مع بقية الحروف الأخري
ومن طريقة كتابة الحالات الاربعة للحروف ستجد اننا وحين تريد مقارنة اسما مثل محمد ستجد انه قد يكتب هكذا.............. محمـــــــــــد
أو يكتبه البعض الأخر هكذا... مـحـمـد
أو هكذا .................... محمد
ومن المؤكد اننا وحين تريد مقارنة الاسم برمجيا سنكتشف انه قد يكون لدينا حالات كثيرة للكلمات او الحروف او الأسماء
الأن يأتي السؤال كيف نقارن بين كل هذه الأشكال من الكلمات برمجيا؟
حين كنت طالبا منذ فترة طويلة كنت أسمع أستاذ اللغة العربية رحمة الله عليه يردد دوما ........ عليك إرجاع الشئ لأصله .... وهذه الكلمات وبالرغم من بساطتها فهي تمثل الاجابة الدقيقة علي السؤال الذي سألناه
و هذا هو بالضبط ما يجب أن نفعله برمجيا أي أنه علينا أن نعيد الكلمة الي أصولها او الي حروفها الاصلية او بلغة مبسطة اكثر علينا التاكد من صحة الكلمات
سؤال أخر لماذا هذه المعاناة ولماذا يجب علينا ان نكتب مثل هذا الكود؟
إجابة السؤال تكمن في أن الكلمات التي تدعم لغة غير الإنجليزية قد تفقد شكلها الاصلي عند حفظها في ملفات ولذلك قد تجدها تظهر علي شكل غير مفهوم للمستخدم
الكود
لقد قمت بكتابة مصفوفة واحدة حيث يتم بها تخزين الأشكال الأساسية للحروف العربية و هذه المصفوفة يتم استخدامها لمقارنة المدخلات و من ثم التأكد من أن الكلمات متشابهة ولمزيد من الدقة من الممكن أن نضيف للمصفوفة المزيد من ألأشكال ألأخري لكيفية كتابة الحروف العربية
المصفوفة المستخدمة في مقارنة المدخلات
وفي هذا الموضوع سنناقش كيفية التأكد من صحة المدخلات المكتوبة باللغة العربية قبل حفظها أو قبل استخدامها بشكل ما مثل حفظها في برامج الداتابيز مثلا
ولتوضيح الموضوع علينا أن نفهم كيف تكتب الحروف العربية في الأصل و ماهي الحالات التي تظهر بها الحروف العربية
الحالة الأولي
أن الحرف قد يظهر منفردا أو منعزلا وكمثال علي ذلك حرف الواو من الممكن ان يظهر هكذا (و) او حرف الألف من الممكن أن يظهر هكذا (أ) او حرف الحاء (ح) وهكذا مع بقية الحروف الأخري
الحالة الثانية
ان الحرف قد يكون جزء من كلمة و ربما يظهر في وسط هذه الكلمة وهنا قد يكون الحرف مقرونا بشئ اخر وكمثال علي ذلك حرف الحاء (ح) مثلا من الممكن ان يظهر هكذا ( ـــــحـــــ.) وهكذا مع بقية الحروف الأخري
الحالة الثالثة
أن الحرف من الممكن أن يظهر في نهاية الكلمة او تختتم به الكلمة مثل حرف الألف فهو يكتب هكذا (ـــــا) او حرف الحاء (ــــح) وهكذا مع بقية الحروف الأخري
الحالة الرابعة
أن الحرف يظهر في اول الكلمة مثل حرف الألف فيظهر كأنه منفردا هكذا (أ) او حرف الحاء فيظهر متصلا بشئ ما هكذا ( حــ ) وهكذا مع بقية الحروف الأخري
ومن طريقة كتابة الحالات الاربعة للحروف ستجد اننا وحين تريد مقارنة اسما مثل محمد ستجد انه قد يكتب هكذا.............. محمـــــــــــد
أو يكتبه البعض الأخر هكذا... مـحـمـد
أو هكذا .................... محمد
ومن المؤكد اننا وحين تريد مقارنة الاسم برمجيا سنكتشف انه قد يكون لدينا حالات كثيرة للكلمات او الحروف او الأسماء
الأن يأتي السؤال كيف نقارن بين كل هذه الأشكال من الكلمات برمجيا؟
حين كنت طالبا منذ فترة طويلة كنت أسمع أستاذ اللغة العربية رحمة الله عليه يردد دوما ........ عليك إرجاع الشئ لأصله .... وهذه الكلمات وبالرغم من بساطتها فهي تمثل الاجابة الدقيقة علي السؤال الذي سألناه
و هذا هو بالضبط ما يجب أن نفعله برمجيا أي أنه علينا أن نعيد الكلمة الي أصولها او الي حروفها الاصلية او بلغة مبسطة اكثر علينا التاكد من صحة الكلمات
سؤال أخر لماذا هذه المعاناة ولماذا يجب علينا ان نكتب مثل هذا الكود؟
إجابة السؤال تكمن في أن الكلمات التي تدعم لغة غير الإنجليزية قد تفقد شكلها الاصلي عند حفظها في ملفات ولذلك قد تجدها تظهر علي شكل غير مفهوم للمستخدم
الكود
لقد قمت بكتابة مصفوفة واحدة حيث يتم بها تخزين الأشكال الأساسية للحروف العربية و هذه المصفوفة يتم استخدامها لمقارنة المدخلات و من ثم التأكد من أن الكلمات متشابهة ولمزيد من الدقة من الممكن أن نضيف للمصفوفة المزيد من ألأشكال ألأخري لكيفية كتابة الحروف العربية
المصفوفة المستخدمة في مقارنة المدخلات
Public ReadOnly Property ValidCharacterRange As IEnumerable(Of Char)
Get
Dim arabicChars As List(Of Char) = New List(Of Char) From {"أ", "ا", "ب", "ت", "ث", "ج", "ح", "خ", "د", "ذ", "ر", "ز", "س", "ش", "ص", "ص", "ض", "ط", "ظ", "ع", "غ", "ف", "ق", "ك", "ل", "م", "ن", "ه", "و", "ي"}
Return arabicChars
End Get
End Property
الدالة التي تقوم بالتاكد من صحة المدخلات وهي لها شكلان
Public Function ValidateString(value As String) As String
Dim valueString As String = CType(value, String)
If Not (String.IsNullOrEmpty(ValueString)) Then
valueString = ValidateString(valueString, ValidCharacterRange)
End If
Return valueString
End Function
Public Function ValidateString(value As String, characterRange 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
الدالة النهائية التي تستخدم في مقارنة المدخلات
Public Function CompareArabicStrings(s1 As String, s2 As String) As Boolean
If ((s1 Is Nothing) OrElse (s2 Is Nothing)) Then
Return (s1 = s2)
End If
Return ValidateString(s1).Equals(ValidateString(s2))
End Function
كيف نستخدم الكود أو كيف نستخدم الدالة لمقارنة المدخلات
Dim mohamed1 As String = "محمـــــد"
Dim mohamed2 As String = "محمـــــــد"
If CompareArabicStrings(mohamed1, mohamed2) Then
MessageBox.Show(mohamed1.ToString & " Equal " & mohamed2.ToString)
End If
Comments
Post a Comment