بسم الله والحمد لله والصلاة والسلام على رسول الله
اليوم أقدم لكم الدالة المعرفة SplitEA فى إصدارها الثانى حيث ،،،
فى الإصدار الأول من الدالة SplitEA فقد تمتعت الدالة بعدة مزايا ومن أهمها:
*تسمح بالتعامل مع اى فاصل مهما كان عدده
*المرونة اذا كُتَب بشكل عشوائى او متكرر
*المرونه فى اختيار التعامل مع الاسماء المركبه او العاديه
*المرونه فى التعامل مع اكثر من فاصل فى آن واحد!
*المرونه فى تجاهل الفواصل الزائده فى بداية ونهاية النص
*استخدام رموز خاصه كالذى تسمح بفصل النصوص فقط او الارقام فقط او اى نمط يمكن تخيله!
بناء الدالة كالتالى
CODE
=SplitEA(text,[break],[row])<br />
أول بارميتر اجبارى وهو النص أو الإسم
ثانى بارميتر اختيارى وهو الفاصل ويمكن كتابة اكثر من فاصل وعند التجاهل تكون المسافه هى الفاصل الافتراضى
ثالث بارميتر اختيارى وهو رقم النص او الاسم بعد الانقسام وعند التجاهل يكون رقم ١ أى الاسم الاول هو الافتراضى
الدالة تتعامل مع الأسماء المركبة فى حالة كان الفاصل هو مسافة فقط
واذا أردت أن يكون الفاصل مسافة ولا يتم الأخذ بالإعتبار الأسماء المركبة
قم بكتابة مسافة أو مسافة كالتالى " | " أو مسافة بين قوسين مربعين كالتالى "[]"
وهناك امكانية اضافة احتمالات اكثر للاسماء المركبة وذلك داخل المتغير name
للاضافة نقوم باضافة الجزء الاول او الثانى من الاسم او الجزئين معا
فمثلا كلمة "عبد" أو "ام" الى اخره
والجزء الثانى مثل "الزهراء" أو "الصديق" الى اخره
والجزئين معا مثل "هارون الرشيد" الى اخره
من مميزات الدالة انها تبحث بنظام الريجيكس
فيمكنك مثلا، مثلا مثلا يعنى:
استخدام الفاصل باك سلاش مع d ليكون الارقام هي الفاصل بين النص
واستخدام الرمز باك سلاش مع D ليكون أى شئ فاصل عدا الارقام يعنى استخراج الارقام منقسمه
ويمكنك استخدام الرمز | أو أحرف بين القوسين [] كعامل OR لأكثر من فاصل
وغيرها من الرموز الخاصه بالريجيكس
ولا يهم كم كان الفاصل متكرر ولا يهم وجود المسافات الزائدة فكل هذا يتم تنظيفه
"ملاحظة لو هتنقل الكود وخلاص ممكن الاسماء المكتوبة بالعربى داخل الكود تنتقل لك بعلامات استفهام او لغة غير مفهومه
يبقى الافضل تحمل الملف ولا اقصد اجبار احد على شئ عايز تاخد الكود وتنقل الاسماء فى حالة لم تنسخ بالشكل الصحيح لا مشكله"
وقد ظهرت أمام مستخدمى الدالة إحتياجات جديدة فقمت [باصدار نسخة جديدة] لتزيد الدالة من تميزها حيث:
١- تم معالجة أخطاء برمجية وتحسين فى سرعة أدائها
٢- فى الإصدار الأول عند إستدعاء آخر جزء فقط يجب تكوين عملية حسابية لمعرفة عدد أجزاء النص ولكن !
فى حالة الأسماء المركبة أو زيادة الفواصل بشكل عشوائى وهو ما يحدث غالباً فى إستدعاء بيانات من مصدر خارجى أو تعدد الفواصل بشكل عشوائى
قد يصبح الأمر أشبه بالمستحيل لحسابه تلقائى أو يدوى خصوصاً مع البيانات الضخمة
*فى [الإصدار الثانى] يمكنك بكل سهولة إستدعاء خانة الفاصل بالسالب مثل (-١) لإستدعاء آخر خانة و (-٢) لإستدعاء ما قبل آخر خانة وهكذا وصولاً لأول خانة
*وعلى سبيل المثال ذلك يتميز بمرونة تجعلك تقوم بالفرز أو التصفية على أساس آواخر النص العادى أو المركب كالتعامل مع أولة
٣- كما يمكنك تسجيل الجزء الأول الخاص ببداية (النص المركب)
ويمكن تسجيل الجزء الثانى الخاص بنهاية (النص المركب)
المميز هنا أنه كلما ظهر نص من الجزء الثانى يُضَم مع الذى قبله مهما بلغ النص المركب تعداده...
وأما عن كود الدالة فهو كالتالى
CODE
Function SplitEA(txt As String, Optional brk As String = " ", Optional rw As Integer = 1) As String
'Developer: Eslam Abdullah
Dim ar() As String, nm(), m As Byte, i%
nm = Array("عبد","ابو","أبو","ام","أم","بن","ابن","إبن","آل",1,"الله","بالله","الزهراء","العهد","النصر","الحق","الاسلام","الإسلام","الدين","الصديق","النور")
With CreateObject("VBScript.RegExp"): .Global = 1
.Pattern = "(^1|" & brk & "|1$)+": txt = .Replace(1 & txt & 1, brk)
End With
If brk = " " Then
ar = Split(Application.Trim(Replace(txt, "_", " ")))
For i = 0 To UBound(ar)
m = Val(CStr(Application.Match(ar(i), nm, 0)))
If m > Application.Match(1, nm, 0) Then ar(i) = "_" & ar(i) Else ar(i) = ar(i) & IIf(m, "_", " ")
Next i
ar = Split(Replace(Replace(RTrim(Join(ar, "")), " _", "_"), "__", "_"))
If rw And Abs(rw) < UBound(ar) + 2 Then SplitEA = Replace(ar((UBound(ar) + 2) * -(rw < 0) + rw - 1), "_", " ") Else SplitEA = ""
Exit Function
End If
ar = Split(Replace(Left(txt, Len(txt) - Len(brk)), brk, "", , 1), brk)
If rw And Abs(rw) < UBound(ar) + 2 Then SplitEA = ar((UBound(ar) + 2) * -(rw < 0) + rw - 1) Else SplitEA = ""
End Function
وآخيراً وليس آخراً إليكم ملف مرفق بتطبيق الدالة المعرفة عملياً فى إصدارها الثانى
مع تحياتى أخوكم فى الله ..... اسلام عبدالله