الدرس التاسع عشر إنشاء مفكرتي الخاصة الجزء السابع
مرحبا بكم في الدرس التاسع عشر من دروس لغة البرمجة c#
في هذا الدرس سوف نقوم بإضافة ميزة جديدة لمفكرتنا
وهي ميزة الإنتقال بالسطور
وكما تعلمنا في الدروس السابقة وبنفس الطريقة نقوم بإنشاء إطار أو كلاس جديد
وسميناه باسم jump
وبعض إضافة الإطار الجديد ينتج لنا ملفين هما ملف jump.cs وملف jump.designer.cs
والملف الثاني يحتوي على خصائص العناصر المستخدمة وهي مربع تحرير لكتابة رقم السطر المراد الإنتقال إليه
وزر للإنتقال وزر آخر لإلغاء الأمر
والملف الأول وهو دائما يحتوي على السطرو البرمجية لتنفيذ الأوامر المطلوبة
وكما تعودنا في الدروس السابقة فقد قمت بكتابة جميع الشروحات المتعلقة بدرسنا لهذا اليوم من خلال هذه الملفات الجديدة
فنرجوا منكم مراجعتها بصورة جيدة حتى تتمكنوا من المواصلة معنا في الدروس القادمة
وفي الدرس السابق وفي آخر الملف الخاص بالإستبدال قمنا بكتابة السطر التالي وذلك للتعرف على عدد الكلمات المستبدلة
والسطر هو
int num = Regex.Matches(newData, find2.Text).Count;// تستخدم خاصية Regex.Match لإجراء عمليات البحث المتقدم. نقوم بكتابة اسم هذه الخاصية ومن ثم بين القوسين نقوم بكتابة النص المراد البحث فيه ثم فاصلة ثم كلمة البحث المراد البحث عنها. وأيضا قمنا بإضافة عدد نتيجة البحث إلى المتغير الرقمي الصحيح والذي سميناه باسم num
فعنصر Regex هو عنصر يستخدم في عمليتي اللبحث والإستبدال المتقدمين
وبإستخدامه يمكننا البحث واستبدال أكثر من كلمة واحدة في العملية الواحدة
وعلى سبيل المثال باستخدام هذه الطريقة يمكننا التحقق من صحة البريد الإلكتروني أو عناوين المواقع الإلكترونية
وهنالك العديد من الرموز والعلامات المستخدمة مع هذا العنصر
ومن أهم هذه العلامات هي كما يلي
. علامة النقطة وتستخدم للبحث عن الحرف أو الكلمات لمرة واحدة أو في حالة التكرار لمرة واحدة فمثلا "ثثث.+" ففي هذه الحالة قمنا بالبحث عن حرف الثاء لذا تكون النتيجة هي الحصول على الثاء الأولى لأنها هي كلمة البحث بالنسبة لنا وأيضا يتم التعرف على الثاء الثانية ولا يمكن التعرف على أكثر من نتيجة واحدة بعد كلمة البحث المعينة
* علامة النجمة وتستخدم للبحث عن الكلمات والحروف لأكثر من مرة أو في حالة التكرار لأكثر من مرة فمثلا إذا بحثنا عن كلمة كلم "كلم*" تكون النتيجة هي كلمة كلم أو كلمة كلمة أو كلمة كلمات أو أي كلمات أخرى تحتوي في بدايتها على الحروف كاف لام ميم
علامة ^ وتستخدم للبحث في بداية السطور فقط فمثلا ^[0-9] بهذه الطريقة يمكننا البحث عن الأرقام من 0 إلى 9 في أوائل السطور ولكتابة الأرقام من وإلى يجب كتابتها بين القوسين كما هو موضح في هذا المثال
$ علامة الدولار وتستخدم للبحث في نهاية السطور فمثلا ^.{10}$ بهذه الطريقة يمكننا البحث عن السطور التي تحتوي على الرقم 10 فقط. كما يتم تجاهل أي سطر يحتوي على أي شيء آخر خلاف الرقم 10
علامة ^ تستخدم للإستثناء فمثلا [^A-Z] بهذه الطريقة يمكننا البحث عن كل شيء ما عدا الحروف الإنجليزية الصغيرة
علامة | تستخدم عند البحث عن أكثر من كلمة واحدة فمثلا "الله|الرحمن" بهذه الطريقة يمكننا البحث في نفس الوقت عن كلمتي الله والرحمن
علامتي فتح وقفل القوس () تستخدم تستخدم لتصنيف وجعل نتائج البحث في شكل مجموعات فمثلا إذا كان لدينا مجموعة من الروابط وأردنا التعرف على مسارات وأسماء هذا الروابط يمكننا الحصول على هذه المجموعات بكل يسر وسهولة باستخدام هذه الطريقة. وسوف نأخذ مثالا لهله الطريقة لاحقا
وبالإضافة لهذه العلامات توجد العديد من العلامات الأخرى يجب البحث عنها عند الضرورة
ولإستخدام هذه العلامات فإن عنصر Regex يحتوي على العديد من الخصائص وأهمها هي كما يلي
خاصية IsMatch وتستخدم هذه الخاصية للتحقق فقط من وجود كلمة البحث من عدمها
ملحوظة لإستخدام عنصر Regex وخصائصه المختلفة يجب علينا إضافة السطر التالي في أول الملف مع عناصر الحزم الإفتراضية
using System.Text.RegularExpressions;
وإذا لم نقم بإضافة هذا السطر فلن نتمكن من إستخدام هذه الميزة أبدا وسوف تظهر لنا العديد من الأخطاء والمشاكل البرمجية
ومثال لإستخدام هذه الخاصية إليكم المثال التالي
string str = "بسم الله الرحمن الرحيم"; // متغير نصي يحتوي على البسملة
bool result = Regex.IsMatch(str, "الله"); // التحقق من وجود كلمة الله. وكلمة bool تعتبر أحدى كلمات المتغيرات وتستخدم فقط للتعرف إذا كانت النتائج بصيغة true أو false
Console.WriteLine(result); // وخاصية Console.WriteLine كما تعلمنا في الدروس السابقة هي لإظهار الكتابة على الشاشة غير أنها لا يمكن التعرف عليها باستخدام قارآت الشاشة
وفي حالتنا هذه تكون النتيجة هي True وذلك لوجود كلمة البحث الخاصة بنا
والخاصية الثاني من خصائص البحث المتقدم هي خاصية Match
هذه الخاصية تستخدم لإظهار أول كلمة يتم الحصول عليها
ملحوظة حتى لو كانت نتائج البحث أكثر من واحدة لا يتم إظهار سوى أول كلمة تم العسور عليها
ومثال لطريقة إستخدام هذه الخاصية هو كما يلي
string str = "محمد, 123, بشير"; // متغير نصي يحتوي على محتوى البحث
Match matche = Regex.Match(str, "[0-9]"); // البحث عن الأرقام من 0 إلى 9
Console.WriteLine(matche.Value); // إظهار نتيجة البحث
في هذه الحالة تكون النتيجة هي 1 فقط ولا يتم التعرف على بقية الأرقام
الخاصية الثالثة هي خاصية Matches
وتستخدم هذه الخاصية للتعرف على جميع كلمات البحث الموجودة
وطريقة إستخدامها هي كما يلي
string str = "mohamed, 123, بشير"; // متغير نصي يحتوي على محتوى البحث
MatchCollection matche = Regex.Matches(str, "[a-z]"); البحث عن جميع الحروف الإنجليزية الصغيرة من a إلى z
foreach (Match m in matche) // يجب تكرار عملية البحث للحصول على جميع النتائج
{
Console.WriteLine(m.Value); // إظهار نتائج البحث
}
وتكون النتيجة هي كما يلي
m
o
h
a
m
e
d
بهذه الطريقة يمكننا البحث عن جميع الحروف الإنجليزية
خاصية Replace وتستخدم لإستبدال النصوص المختلفة
وطريقة إستخدامها هي كما يلي
string str = "محمد بشير"; // متغير نصي يحتوي على نص البحث
Regex reg = new Regex("محمد"); // كلمة البحث أو الكلمة المراد إستبدالها
string result = reg.Replace(str, "أحمد"); // الكلمة الجديدة المراد الإستبدال بها
Console.WriteLine(result); // إظهار نتيجة الإستبدال
وتكون النتيجة كما يلي
أحمد بشير
وكما ذكرنا سابقا فيمكننا إستخدام الأقواس () لتصنيف نتائج البحث
وفي ما يلي مثال يوضح هذه الطريقة
// الحصول على جميع مسارات وأسماء الروابط الموجودة
string str = "<"a href=\"index.html\">home <"a href=\"about.html\">about us"
// متغير نصي يحتوي على أكثر من رابط واحد. ملحوظة كما تعلمنا في دروسنا السابقة فإن محتوى المتغيرات النصية يجب أن تكون بين علامتي تنصيص
ولكن إذا أردنا البحث عن علامة التنصيص كما هو في حالتنا هذه يجب علينا وضع علامة القاطعة الخلفية قبل علامة التنصيص المراد البحث عنها
System.Text.RegularExpressions.MatchCollection mc = System.Text.RegularExpressions.Regex.Matches(
str, // محتوى النص المراد البحث فيه
@"<"a href=\"(?
وبين القوسين في الجزء الثاني قمنا بتسمية المجموعة الخاصة بأسماء الروابط باسم text. ملحوظة لا يمكن التعرف على الرابط إذا كان مكتوبا في أكثر من سطر واحد وسوف نتطرق لطريقة البحث في أكثر من سطر في دروسنا القادمة إنشاء الله
System.Text.RegularExpressions.RegexOptions.IgnoreCase // خاصية IgnoreCase تستخدم لتجنب مراعات الحروف الكبيرة وأو الصغيرة وتجعلنا نتعامل مع جميع الحروف بصيغة واحدة دون تمييز
| System.Text.RegularExpressions.RegexOptions.Singleline); // وخاصية Singleline تستخدم لتقييد مجال البحث في سطر واحد أما إذا أردنا جعل مجال البحث يشمل أكثر من سطر واحد يجب علينا إستخدام خاصية Multiline
foreach (System.Text.RegularExpressions.Match m in mc) // تكرار عملية البحث
{
Console.WriteLine("URL:{0}", m.Groups["url"].Value); // إظهار نتائج البحث للمجموعة الأولى وهي مسارات الروابط
Console.WriteLine("اسم الرابط:{0}", m.Groups["text"].Value); // إظهار نتائج المجموعة الثانية وهي خاصة بأسماء الروابط
}
وخصائص البحث المتقدم كثيرة ومتعددة لذا نرجو البحث عنها في الإنترنت
وعند إتقان وفهم طرق إستخدامات هذه الطريقة يمكننا الإستفادة منها بصورة كبيرة وفي كثير من المجالات والبرامج
ملحوظة طريقة البحث المتقدم هذه تستخدم في كثير من لغات البرمجة الأخرى وطرق إستخدامها متشابهة لحد كبير
وبهذا نكون قد إنتهينا من درسنا لهذا اليوم فأرجو من الجميع أن لا ينسونا من صالح الدعاء ومع خالص تحياتي
ولتحميل المشروع المستخدم في هذا الدرس الرجاء الضغط على رابط
قد قمنا باستخدام العديد والكثير من الخصائص الجديدة
في ملف jump.cs وهو الملف الخاص بالسطور البرمجية الخاصة بالإنتقال بالسطور داخل مربع التحرير الرئيسي للبرنامج
لذا نتمنا مراجعة محتوى هذا الملف بصورة جيدة حتى يسهل علينا الاستمرار في الدروس القادمة
كما يسرني استقبال أسألتكم وذلك من خلال المنتدى العام أو من خلال مجموعة البريد الإلكتروني
للذهاب إلى صفحة المتدى العام الرجاء الضغط على رابط
وللإشتراك في مجموعة البريد الإلكتروني الرجاء الضغط على
الإشتراك بمجموعة البريد الإلكتروني وإلغاء الإشتراك