اذهب الي المحتوي
أوفيسنا

تقسيم وتوزيع النص على عدة حقول ( تجزئة الاسم الرباعي )


ابوخليل

الردود الموصى بها

السلام عليكم ورحمة الله وبركاته  

اخواني الاكارم تحية طيبة وبعد :

 

الدالة Split هي المسؤلة عن تقسيم السلسلة النصية  ويمكننا من خلالها ارجاع أو حذف الجزء الذي نحدده

ويتم توظيفها في النماذج والتقارير داخل محرر الفيجوال على النحو التالي :

name1 = Split(FullName, " ")(0)
name2 = Split(FullName, " ")(1)
name3 = Split(FullName, " ")(2)
name4 = Split(FullName, " ")(4)

- باعتبار FullName هو حقل الاسم الكامل  

علما انه يمكن كتابة الاسم داخل الكود بين علامتي تنصيص مزدوجتين وستقوم الدالة بارجاع الجزء المحدد

- وما بين علامتي التنصيص "  "   الفاصلة التي على اساسها يتم تجزئة النص  وهي هنا مسافة فارغة 

- اما الارقام (0) ، (1) ، (2) ...   فهي ترمز الى مكان الجزء داخل النص 

الى هنا كل شيء يسير على ما يرام

ولكن حين نريد استخدامها داخل الاستعلام نفاجأ بأنها لا تعمل وتظهر رسالة من الاستعلام بأن هذه الدالة غير معروفة

والحل : ان نعقد بين الدالة والاستعلام صفقة عمل و تعارف   :smile:

ولن يتم لنا ذلك حتى نوجد للدالة مكان اقامة دائم في قاعدة البيانات الحالية 

 

وللدرس بقية :  تعريف الدالة + التطبيق   ان شاء الله

  • Like 2
رابط هذا التعليق
شارك

جزاك _ربي جنته أستاذي 

 

وإياك اخي الحبيب

 

في وحدة نمطية عامة نلصق الجملة البرمجية التالية :

Public Function qsplit(FullName As String, i As Integer)
On Error Resume Next
qsplit = Split(FullName, " ")(i)
End Function

لاحظ اننا انشأنا دالة جديدة بناء على الدالة الاصلية  

وجعلنا لها اسما قريبا من الدالة الاصلية حتى يتم التعرف عليها وعلى عملها من اول نظرة

ولاحظ ايضا ما حدث لوسائط الدالة الاصلية وترتيبها حيث سيتم توظيف الدالة الجديدة داخل الاستعلام على النحو التالي :

 
name1 : qsplit(FullName; 0)
name2 : qsplit(FullName; 1)
name3 : qsplit(FullName; 2)
name4 : qsplit(FullName; 3)

وفي المثال تطبيق للشرح والمقال :

 

 

تجزئة النص.rar

  • Like 4
  • Thanks 1
رابط هذا التعليق
شارك

  • 1 month later...

فكرة ممتازة

كنت ابحث عنها

ولكن انا عندي قاعدة بيانات بها اسم الطالب مجزأ

اسم اول - اسم الاب - اسم الجد وهكذا

عملت تقرير وجمعت به الاسم بالكامل كالتالي

name1+" "+name2+" "+name3+" "+name4

فهل هناك طريقة تجعل عند الانتقال من ادخال بيانات الطالب الأول تلقائيا يتم حفظ الاسم مجزئ والاسم بالكامل

 

شكرا

رابط هذا التعليق
شارك

  • 5 months later...

الاخوة الكرام

علي المصري ...  at_aziz ..... تعليموه

شكرا لمروركم وثنائكم

 

هي يمكن حل مشكلة الأسماء المركبة؟

هنا بعض المشاركات حول هذا الموضوع

  • Like 2
رابط هذا التعليق
شارك

  • 1 month later...

 

جزاك _ربي جنته أستاذي 

 

وإياك اخي الحبيب

 

في وحدة نمطية عامة نلصق الجملة البرمجية التالية :

Public Function qsplit(FullName As String, i As Integer)
On Error Resume Next
qsplit = Split(FullName, " ")(i)
End Function

لاحظ اننا انشأنا دالة جديدة بناء على الدالة الاصلية  

وجعلنا لها اسما قريبا من الدالة الاصلية حتى يتم التعرف عليها وعلى عملها من اول نظرة

ولاحظ ايضا ما حدث لوسائط الدالة الاصلية وترتيبها حيث سيتم توظيف الدالة الجديدة داخل الاستعلام على النحو التالي :

 
name1 : qsplit(FullName; 0)
name2 : qsplit(FullName; 1)
name3 : qsplit(FullName; 2)
name4 : qsplit(FullName; 3)

وفي المثال تطبيق للشرح والمقال :

 

 

شكرا لك اخي العزير على هذا المثال الرائع ..

لدي سؤال آخر هل يوجد طريقة لمعرفة عدد خانات الاسم قبل توزيع الاسماء .. فأحياناً تكون الاسماء خماسية

رابط هذا التعليق
شارك

شكرا لك اخي العزير على هذا المثال الرائع ..

لدي سؤال آخر هل يوجد طريقة لمعرفة عدد خانات الاسم قبل توزيع الاسماء .. فأحياناً تكون الاسماء خماسية

 

 
سؤال جميل وتكثر الحاجة اليه
فقد تكون الاسماء خماسية او رباعية او ثلاثية .... وتكون حاجتنا في اظهار الاسم الاول واسم العائلة فقط مثلا
لذا فنحن بحاجة الى عدد خانات الاسم كما تفضل به الاخ السائل لكي نختار ما نريد 
من اجل هذا سيكون التطبيق التالي داخل الاستعلام لاختيار الاسم الاول واسم العائلة مهما تعددت الخانات
  • Like 3
رابط هذا التعليق
شارك

أولا :

تطبيق الفكرة داخل النموذج  في حقول غير منضمة

On Error Resume NextDim 
x As Integer
x = Len([txtNm]) - Len(Replace([txtNm], " ", "")) 'هذا السطر لعد الفواصل بين الأسماء
name1 = Split(txtNm, " ")(0) ' الصفر يعني ما قبل الفاصلة الأولى
​ 'اذا كان عدد الفواصل=1 يعني اسمين فقط سيتم تعييين الاسم الثاني كاسم عائلة
If x = 1 Then name4 = Split(txtNm, " ")(1)
If x = 2 Then name4 = Split(txtNm, " ")(2) '
If x = 3 Then name4 = Split(txtNm, " ")(3) '
If x = 4 Then name4 = Split(txtNm, " ")(4) '
 

وفي المثال غنية عن زيادة المقال

 

يتبع ..

_تجزئة النص في النموذج حسب التحديد .rar

  • Like 2
رابط هذا التعليق
شارك

ثانيا تطبيق الفكرة داخل الاستعلام

نحتاج الى صنع وحدة نمطية عامة تقوم بالعمليات المشروطة السابقة ومن ثم نقوم بتوظيفها داخل الاستعلام

وما يهمنا هنا هو الحقل الرابع والذي هو حقل اسم العائلة اما الحقل الاول فقد تمكنا منه من خلال اول مشاركة

 

وستكون الوحدة النمطية على هذا الترتيب

Public Function qsplit4(FullName As String)
On Error Resume Next
Dim x As Integer
x = Len(FullName) - Len(Replace(FullName, " ", ""))
 qsplit4 = Split(FullName, " ")(x)

End Function

 

تجزئة النص في الاستعلام حسب التحديد.rar

  • Like 1
رابط هذا التعليق
شارك

  • 4 months later...

السلام عليكم

اساتذتي الأجلاء ممكن شرح هذا الكود وعمل حل للأسماء المركبة ( عبد الرحمن ، ضيف الله ، شمس الدين ) التي يوجد بينهما فاصلة.

 

Function PartOfName(InName As String, NumberOfPart As Byte) As String
Dim TheSpaceNumber As Byte
Dim i As Integer, U As Integer
 
InName = NoSpaces(InName)
PartOfName = ""
If InName = "" Then Exit Function
 
Do
    U = i
    i = InStr(i + 1, InName, " ", 1)
    If i <> 0 Then
        TheSpaceNumber = TheSpaceNumber + 1
        If TheSpaceNumber = NumberOfPart Then Exit Do
    ElseIf TheSpaceNumber + 1 = NumberOfPart Then
        i = Len(InName) + 1
        Exit Do
    Else
        Exit Function
    End If
Loop
    
    PartOfName = Trim(Mid(InName, U + 1, i - U - 1))
End Function
رابط هذا التعليق
شارك

أستاذي الكريم الغالي :
أجزل الله لكم المثوبة على ما تفضلتم به .

الطريقة التي أتبعها في معالجة الأسماء (المركبة) قبل تجزئتها :
1- استبدال الفراغ قبل (ينت ، ابن ، بن ، الله ، الرحمن ، الكريم ، الدين) [بشرط وجود فراغ بعدها] والفراغ بعد كلمة (عبد) بشرطة_ [باستخدام Replace]
2- تجزئة الأسماء ، ومراجعة التجزئة بشكل غير آلي (في الاستعلام الاسم مجزأ وكاملا)
3- استبدال الشرطة_ بفراغ .
لاتحل المشكلة بشكل تام لوجود أسماء مركبة مثل : محمد علي ، حج عبدالله (وتوجد بعض الأسماء التي تستخدم مفردة ومركبة ؛ مثل : غرم وغرم الله )

تم تعديل بواسطه Hosain21
رابط هذا التعليق
شارك

زائر
هذا الموضوع مغلق.
  • تصفح هذا الموضوع مؤخراً   0 اعضاء متواجدين الان

    • لايوجد اعضاء مسجلون يتصفحون هذه الصفحه
×
×
  • اضف...

Important Information