الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

تقسيم جملة غلى عدد كلمات افيدونى

بدأه tahakassem في 17 سبتمبر 2008 · 6 رد · 1,282 مشاهدة · في لغة Ms Visual Basic 6 وما قبلها من إصدارات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

اخوانى

عندي تكست بوكس يحتوي على اسم شخص

وليكن " احمد محمد حسن "

اريد عند الضغط على زر الامر ان

الاسم الاول توضع فى تكست بوكس1

اسم الاب توضع فى تكست بوكس2

اسم العائلة توضع فى تكست بوكس3

مشكور لكل من ساعدنى

#2

أستخدم الدالة Split

Dim Str() As String

Str = Split("احمد محمد حسن", " ")

Text1 = Str(0)
Text2 = Str(1)
.
.
#3

السلام عليكم...

طبعاً الحل الذي قدمه الأخ عبد العزيز اليوسفي (استعمال الدالة Split) هو أسرع و أبسط حل، و هو ناجح في معظم الأحوال، لكن تبقى هناك مشكلة (و ستسبب لك صداعاً !!!). أقصد من ناحية تقسيم الاسم إلى مكوناته بالاعتماد على الفراغات، و ليس من ناحية استعمال الدالة Split.

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

قد تضطر لتصحيح مثل هذه الحالات يدوياً.

نرجو الاستفادة و السلام.

وَ قُلِ اعْمَلُوا فَسَيَرَى اللهُ عَمَلَكُمْ وَ رَسُولُهُ وَ الْمُؤْمِنُونَ

صدق الله العظيم

#4
  1. Private Sub Form_Load()
  2. Dim Names() As String
  3. Dim Word As String
  4. Dim MyName As String
  5. Dim LastName As String
  6. Dim NameCounter As Long
  7. Dim n As Long
  8. Dim r As Integer
  9.  
  10. List1.Clear
  11. NameCounter = 0
  12. Names = Split("أحمد عبد الل
    07; عماد الدين محم
    3;", " ")
  13. For n = LBound(Names) To UBound(Names)
  14. Word = Trim(Names(n))
  15. If Len(Word) > 0 Then
  16. If Len(MyName) > 0 Then MyName = MyName & " "
  17. MyName = MyName & Word
  18. r = CheckName(Word)
  19. If r = 0 Then
  20. List1.AddItem MyName
  21. LastName = Word
  22. MyName = ""
  23. NameCounter = NameCounter + 1
  24. ElseIf r = 1 Then
  25. List1.RemoveItem List1.ListCount - 1
  26. List1.AddItem LastName & " " & MyName
  27. MyName = ""
  28. End If
  29. End If
  30. Next n
  31.  
  32. MsgBox NameCounter
  33. End Sub
  34.  
  35. Private Function CheckName(Word As String) As Integer
  36. Dim myWord As String
  37.  
  38. myWord = Trim(Word)
  39. myWord = Replace(myWord, "ـ", "")
  40.  
  41. CheckName = 0
  42.  
  43. Select Case myWord
  44. Case "عبد"
  45. CheckName = -1
  46.  
  47. Case "الدين"
  48. CheckName = 1
  49. End Select
  50. End Function
  51.  
  52.  

تم تعديل هذه المشاركة بواسطة المبرمج أحمد في 18 أكتوبر 2008 في 20:20

841141664.gif
#5

بسم الله الرحمن الرحيم

السلام عليكم ورحمة الله .. الأستاذ najy_zl

بإمكان صاحب البرنامج وضع إرشادات حول طريقة كتابة الإسم العادي أو المركب على سبيل التمييز

أي أنه من الممكن أن يكون (نجم-الدين أحمد علي) أو (عبد-الله عبد-الرحيم عمرو) أو (أحمد-فؤاد فاروق)

وبهذا لا يوجد أي مشكله بإذن الله وتكون أسهل من أن تضع إحتمالات بكافة الأسماء المركبة التي لا قاعدة لها

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

فليقبل الجميع تقديري واحترامي .. ولكم تحياتي

#6
اقتباس
يمكننا كتابة "عبدالله" هكذا دون فراغ بين "عبد" و "الله"، لكن لا يمكننا كتابة "نجمالدين" هكذا
اقتباس
وضع إرشادات حول طريقة كتابة الإسم العادي أو المركب

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

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

#7

مشكورا لكل من ساهم فى هذا الموضوع

مواضيع مشابهة