بسم الله الرحمن الرحيم
مقدمة :
في الدروس السابقة تعاملنا مع نصوص عادية بواسطة ال LINQ فكنا مثلا فيالمثال الأول نقومبمعالجة النصوص اعتمادا على دوال معينة مثل Split ذاك ان النصوص لم تكن منظمة أما الآن فسوف نتعامل مع نصوص Semi-Structured يعني انها في تنظيم معين مثلا النصوص التي سنتعامل معها تكون في Blocks و مفصولة بفاصل موحد مثلا ال vbcrlf(العودة للسطر) او Tabulation أو شئ المهم أنه يكون موحد فمثلا في مثالنا اليوم سيكون الفاصل هو ال vbcrlf و سوف نرى كيف اننا لن نحتاج لل Split لتتعامل مع البيانات .
مستلزمات الكود :
إنشاء نصين:
الأول نسمه List1.txt و يكون محتواه كالتالي :
1 25 41 255 14 541 474 51 25 ayoub sf 47
الثاني اسمه List2.txt و فيه :
11 45 1 255 64 51 474 5 25 ayoub sfhg 4
انشأ مشروع جديد من نوع Console Application
استيراد :
Imports System.LINQ Imports System.IO
الكود :
Dim List1 As String() = File.ReadAllLines("c:\list1.txt")
Dim List2 As String() = File.ReadAllLines("c:\list2.txt")
Dim DifferenceQuery = List1.Except(List2)
Console.WriteLine("Elements That are in the List1 and not in List2")
For Each Element In DifferenceQuery
Console.WriteLine(Element)
Next
Console.ReadKey()شرح الكود :
السطرين الأولين قمنا فيهما بوضع محتويات النصين الذان أنشأناهما في متغيرين و و بالتحديد في Arrays فالدالة ReadAllLines ترجع Array وطبعا يتم التقسيم آليا على حسب الجوع للسطر يعني كل Element من ال Array المعادة يكون سطر من النص وبهذا فالمتغيرين List1 و List2 يحتويان على الأسطر الموجودة في النصين.
بعد ذلك نقوم بعمل ال Query و هي :
List1.Except(List2)
أعرف ما يدور في خلدك الآن ، أنت تقول ماهذا ؟؟؟ نحن عهدنا ال Queries على شكل
From <element> in <collection > where <condition>
الجواب هو هناك أنواع من ال Queries تكون بهذا الشكل ومنها ال Union,Destinct.
المهم الآن نقوم بتنفيذ ال Query عن طريق ال For Each
اقتباسFor Each Element In DifferenceQueryConsole.WriteLine(Element)
Next
حيث يتم وضع النتائج في ال Console Window.
و بهذا نكون قد أنهينا مثالنا
خاتمة :
هذه الأمور قد دون معنى خصوصا أننا لم نوضفها في أمثلة واضحة أكثر لكن تأكد انها ستنفعك كثيرا