بسم الله الرحمن الرحيم
مقدمة :
كنت قبل مدة بكتابة مقال حول ال LINQ في الفيجوال بيسك 9 :
نظرة على جديد الفيجوال 9 -الجزء الأول
نظرة على جديد الفيجوال 9 -الجزء الثاني
و قام الأخ سامر سلو أيضا مشكورا بكتابة دروس حول الجديد في ال VS2008 من ضمنها مقدمة لتقنية ال LINQ و تجدونها هنا :
الآن و بعد قراءتك لهذه المقدمات لهذه التقنية دعنا نخوض في التفاصيل و البدأ بعمل أمثلة حتى نستطيع فهم التقنية أكثر فأكثر، أنت تعلم أن هذه التقنية يمكن استعمالها مع كل أنواع البيانات تقريبا يعني ممكن نعمل بها مع الكائنات Objects و ال XML و ال SQL.
الآن سوف نقوم بالخوض في استعمالات ال LINQ مع النصوص (LINQ And Strings) لذا سيكون درسنا الأول بعنوان : كيف يمكنك تعداد تكرار كلمة في نص معين بواسطة ال LINQ.
التفاصيل
المثال الذي سأطرحه هوفقط من أجل شرح امكانية استعمال ال LINQ من اجل البحث في نص معين و تعداد تكرار كلمة معينة لذا لن نبحث في تسريع الكود او أمور أخرى و لن يكون الكود احترافي لأنه و بكل بساطة من اجل عمل ما نريد يمكنك استعمال Methods أخرى منها Matches التي تستعمل ال Regular Expression أو الخاصية IndexOf لذا لو كنت بصدد عمل برنامج كامل لا أنصحك باستعمال ال LINQ لكن دعه لأمور أكثر تعقيدا و احترافية و التي قد نراها لاحقا، من أجل تنفيذ ما نريد قم بانشاء مشروع جديد في الفيجوال ستوديو 2008 من نوع Windows Application وطبعا نوع ال FrameWork هو 3.5 الآن اضف TextBox و Button بعد الدخول الى الكود قم باستيراد فضاء الأسماء :
Imports System.LINQ
الكود في ال Button سيكون كالتالي :
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim Text As String = "this is a simple text that we will use it in our exemple so if you are interested pleaz let a comment coz that will mean that you love VB9 like me"
Dim WordOccurences As Integer
Dim SplitText() As String = Text.Split(New String() {" "}, StringSplitOptions.RemoveEmptyEntries)
Dim OurQuery = From word As String In SplitText Where word.ToLower = TextBox1.Text.ToLower Select word
WordOccurences = OurQuery.Count
MsgBox(WordOccurences)
End Subشرح الكود :
أولا قمنا بتحديد متغير وضعنا فيه نص (طبعا يمكنك انشاء TextBox آخر و تأخذ محتواه لتبحث فيه) و هذا النص هو الذي ستجري عليه عملية البحث
قمنا بعد ذلك بتحديد متغير من نوع Integer و هو الذي سيحتوي على عدد تكرار الكلمة التي سنبحث عنها
هناك نقطة مهمة وهي أنه اذا اردنا ان نبحث في نص بواسطة ال LINQ يجب تحويل النص الى Array وذلك ماقمنا به الآن حيث استعملنا خاصية Split وقسمنا النص تبعا للفراغات الموجودة فيه و بالنسبة ل StringSplitOptions.RemoveEmptyEntries فهي ببساطة تقوم بحذف ال Elements الفارغة
الآن النقطة المهمة و هي كتابة ال Query الخاصة بالبحث و ال Query هي :
From word As String In SplitText Where word.ToLower = TextBox1.Text.ToLower Select word
لنترجمها للغةالعربية :D
من word في SplitTest حيث word.ToLower = TextBox1.Text.ToLower اختر word
هههههههه
المهم word هنا هو متغير قد يقول البعض "لكن انت لم تقم بتعريفه ؟؟؟" أقول له اذن أنت لم تقرأ المقدمات التي ذكرتها في المقدمة :D
المتغير اذن هنا سيكون String وبكل بساطة المتغير word سوف يحتوي كلمرة على Element من ال Elements الموجودة في ال Array التي أنشأناها من النص SplitText و طبعا لن يرجع كل الكلمات لكن على حسب الشرط المحدد :
Where word.ToLower = TextBox1.Text.ToLower
أضفنا .ToLower فقط للبحث عن الكلمات كيفما كانت يعني لوبحثنا عن THe فسيرجع كل ال Occurences لهذه الكملة كيفما كانت حالة أحرفها (the,ThE,THE..)
أخيرا نريد معرفة عدد التكرارات الشئ الذي سنعرفة من خلال السطر التالي :
WordOccurences = OurQuery.Count
طبعا كما ترون OurQuery لها خاصية Count التي تعيد عدد النتائج
ونظهر النتيجة بعد ذلك في MsgBox
وهكذا نكون قد انتهينا و بقي لكم فقط التطبيق و الاستمتاع بجديد الفيجوال بيسك 9
خاتمة :
أتمنى أن تكون هذه اللمحة قد أفادتكم و نلتقي في باذن الله في درس مقبل لتكملة ال LINQ And STRINGS
و السلام عليكم