12-12-16, 01:05 AM
التعامل مع النصوص في Strings - VB.NET
طرق التعامل مع النصوص من دمج و حذف و عمليات اخرى...؟
ادخال نص في المكان المحدد
Insert a string in a specific position
تحتاج في بعض الاحيان الى ادخال نص في مكان محدد في نص موجود , نستخدم الدالة Insert و هي تاخذ وسيطتين
الوسيطة الاولى: موقع بداية الادخال و هي رقمية تبدأ من الرقم 0
الوسيطة الثانية: و هي النص المراد ادخاله
المثال التالي يوضح:
PHP كود :
Dim FirstName As String = "Ali"
Dim LastName As String = "Mohmad"
Dim FullName As String = FirstName & " " & LastName
Dim MiddleName As String = "Morad"
FullName = FullName.Insert(4, MiddleName)
MsgBox(FullName)
دمج النصوص مع بعضها
Combining strings
لدمج اكثر من نص مع بعضهم نستخدم المعامل &
مثال1:
PHP كود :
Dim FirstName As String = "Ali"
Dim LastName As String = "Mohmad"
Dim MiddleName As String = "Morad"
Dim FullName As String
FullName = "My name is : " & FirstName & MiddleName & LastName
مثال2:
PHP كود :
Dim FirstName As String = "Ali"
Dim LastName As String = "Mohmad"
Dim MiddleName As String = "Morad"
Dim FullName = String.Concat(FirstName, " ", MiddleName, " ", LastName)
MsgBox(FullName)
مثال3:
PHP كود :
Dim FirstName As String = "Ali"
Dim LastName As String = "Mohmad"
Dim MiddleName As String = "Morad"
Dim FullName = String.Join(" ", FirstName, MiddleName, LastName)
MsgBox(FullName)
استخدمنا الدالة Join لدمج النصوص , الوسيطة الاولى تستخدم للفصل بين النصوص المراد دمجها .
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
اخذ كلمة او نص من النص المحدد بدءً من الموقع المحدد و بالطول المحدد
Retrieve a String
الموقع دائماً يبدأ من الموقع 0
مثال1:
PHP كود :
Dim txt As String = "Hello Every One .. ?"
txt = txt.Substring(6, 5)
MsgBox(txt)
مثال2:
PHP كود :
Dim Name As String = "Sammer Brkat...?"
Name = Name.Substring(7)
MsgBox(Name)
في المثال الثاني نحن استخدمنا وسيطة واحدة للدالة Substring يتم حذف كل المحارف من الموقع 0 الى العدد المحدد في الوسيطة ويبقي على باقي الجملة
مثال3:
PHP كود :
Dim Name As String = "Ali Hani Brkat"
Name = Mid(Name, 5, 4)
MsgBox(Name)
المثال الثالث باستخدام الدالة Mid تعمل نفس الدالة Substring غير انها تأخذ وسيطة اضافية هي عبارة عن النص المراد معالجته.
مثال4:
احياناً قد تحتاج الى اخذ كلمة او جملة من (وسط نص او بعد حرف ما او قبل حرف ما) و انت لا تريد الدخول في معمعة موقع الجملة ضمن النص المعطى , لذا من المفيد ان يكون لديك دوال جاهزة تفيدك في تنفيذ طلبك بكل سهولة.
يمكنني الاستفادة من كثير من الامور و الدوال الجاهزة للحصول على موقع حرف محدد مثل الدالة (IndexOf) التي تعيد موقع الحرف المحدد , كما و يمكنني الاستفادة من الدالة (LastOfIndex) و التي تعيد لي عدد الحروف اعتباراً من الموقع المحدد للحرف المرسل الى اخر النص.
هكذا اكون قد حددت بداية الموقع و من ثم عبر عملية طرح بسيطة اكون قد حددت طول النص المراد جلبه و بالتالي اصبحت قادراً على جلب أي جملة ضمن نص ما .
و ليكون الامر سهل علينا احببت ان اصنع دالة لها تقوم بأخذ 3 وسائط
1-النص المراد البحث فيه.
2-الحرف المراد البحث عنه (موقع البداية).
3-الحرف الذي نريد الحذف بعده(موقع النهاية)
تابع الدالة التالية:
PHP كود :
Function Between(value As String, a As String, b As String) As String
Dim posA As Integer = value.IndexOf(a)
Dim posB As Integer = value.LastIndexOf(b)
If posA = -1 Then
Return ""
End If
If posB = -1 Then
Return ""
End If
Dim txt As Integer = posA + a.Length
If txt >= posB Then
Return ""
End If
Return value.Substring(txt, posB - txt)
End Function
PHP كود :
Dim Name As String = "Ali Hani Brkat"
MsgBox(Between(Name, "i", "B"))
النتيجة المعادة بعد التنفيذ Hani
بنفس الطريقة السابقة يمكننا جلب كل الكلام بعد موقع محدد عبر ارسال محرف معين وفق الدالة التالية:
PHP كود :
Function After(value As String, a As String) As String
Dim posA As Integer = value.LastIndexOf(a)
If posA = -1 Then
Return ""
End If
Dim txt As Integer = posA + a.Length
If txt >= value.Length Then
Return ""
End If
Return value.Substring(txt)
End Function
و كذلك قبل محرف معين وفق الدالة التالية
Function Before(value As String, a As String) As String
Dim posA As Integer = value.IndexOf(a)
If posA = -1 Then
Return ""
End If
Return value.Substring(0, posA)
End Function
حذف كلمة او حرف من نص محدد اعتباراً من الموقع المحدد و بالطول المحدد.
Remove a string
مثال1:
PHP كود :
Dim txt As String = "Hello Every One .. ?"
txt = txt.Remove(6, 5)
MsgBox(txt)
في هذا المثال تم حذف الكلمة Every
مثال2
PHP كود :
Dim FirstName As String = "Ali"
Dim LastName As String = "Mohmad"
Dim MiddleName As String = "Morad"
Dim FullName As String
FullName = "My name is : " & FirstName & MiddleName & LastName
FullName = FullName.Remove(6, MiddleName.Lengt)
MsgBox(FullName)
مثال3:
PHP كود :
Dim Name As String = "My Name Is : Ali Hani Brkat"
Dim index As Integer = Name.LastIndexOf("Hani")
Name = Name.Remove(index)
MsgBox(Name)
المثال يستخدم الدالة LastIndexOf للحصول على عدد المحارف بعد كلمة Hani , نستخدم الدالة Remove لحذف الكلمة و ما يأتي بعدها من النص
تكرار محرف او كلمة عدد من المرات
Repeat a character or a string
مثال1:
PHP كود :
Dim txt As String = String.Join("", Enumerable.Repeat("xr", 4))
MsgBox(txt)
مثال2:
Dim txt As String = String.Join("", Enumerable.Repeat("B", 2))
MsgBox(txt)
مثال3:
Dim txt As String = String.Concat(Enumerable.Repeat("ab", 3))
MsgBox(txt)
مثال4:
Dim txt As New String("*"c, 5)
MsgBox(txt)
استبدال نص موجود بنص اخر الدالة Replace
باستخدام الدالة Replace الامر سهل جداً
الدالة تأخذ وسيطتين الاولى النص المراد استبداله , و الثانية النص الذي نريد وضعه مكان النص السابق.
مثال1:
PHP كود :
Dim Name As String = "Ali Hani Brkat"
Name = Name.Replace("Hani", "Mohmmad")
MsgBox(Name)
هنا استبدلنا Hani بــ Mohmmad
تستخدم الفئة StrinBuilder نفس الدوال السابقة .
عليك باستيراد فضاء الاسماء System.Text
مثال2:
PHP كود :
Dim Name As New StringBuilder("Ali Hani Brkat")
Name.Replace("Hani", "Moneer")
MsgBox(Name.ToString)
كما و يمكنك استخدام المكتبة Regular Expressions
و هي افضل من ناحية التعامل مع استبدال النصوص , يمكنك اجراء عمليات اكثر تعقيدا بكود اقل و ابسط.
البحث عن نص في مصدر نصي الدالة Contains
نستخدم الدالة Contains لفحص تواجد نص ما ضمن نص مصدري
و هي تعيد قيمة منطقية (True , False) فاذا وجد النص اعاد True و الا سيعيد False
مع مراعاة ان العملية حساسة لحالة الاحرف (Case Sensitive)
مثال1:
PHP كود :
Dim Name As String = "Ali Hani Brkat"
MsgBox(Name.Contains("ali"))
القيمة المعادة False لأنها حساسة لحالة الاحرف (Ali لا تساوي ali)
القيمة المعادة يمكنك تخزينها في أي مكان في الذاكرة و هكذا لن تعيد استدعاء الدالة لأكثر من مرة.
نسخ النصوص الدوال Copy , CopyTo
نحن لا نستخدم هذه الدوال في العادة لاننا نستفيد من النصوص المعادة من قبل الدوال و طرق اخرى غيرها, على أي حال.
الدالة Copy :نستخدمها لنسخ النص المعطى و نذكرك بانها Shared Method , أي نستخدمها من الكلاس String مباشرة .
مثال1:
PHP كود :
Dim Name As String = "Mohmmad Mansoor"
Dim NameCopied As String = String.Copy(Name)
If Not ReferenceEquals(Name, NameCopied) Then
MsgBox("القيم غير متطابقة")
End If
لاحظ استخدمنا الدالة ReferenceEquals لمعرفة اذا ما كان النصين يشيران الى نفس المرجع ام لا .
القيمة المعادة وفق الدالة ReferenceEquals منطقية.
الدالة CopyTo :نستخدمها لنسخ مجموعة محارف من نص ما الى مصفوفة نصية,مع التذكير بان طول المصفوفة يجب ان يكون بعدد المحارف المراد نسخها.
المصفوفة تبدأ عادة من 0 فلتعريف مصفوفة من 4 عناصر نكتب (3)Array
مثال1:
PHP كود :
Dim Name As String = "Adel Bin Shaker"
Dim Array(3) As Char
Name.CopyTo(0, Array, 0, 4)
For Each C As Char In Array
MsgBox(C)
Next
في المثال قمنا بنسخ احرف Adel الى مصفوفة حروف وعدد الحروف اربعة لذا عرفنا مصفوفة من 4 عناصر تبدا من الصفر.
الدالة CopyTo تاخذ 4 وسائط .
الوسيطة الاولى تحديد موقع النسخ في النص,
الوسيطة الثانية اسم المصفوفة المراد النسخ اليها,
الوسيطة الثالثة موقع النسخ داخل المصفوفة ,
الوسيطة الرابعة عدد المحارف المراد نسخها.
اختبار النصوص الفارغة , الدوال Empty , IsNullOrEmpty , IsNullOrWhiteSpace
في العادة النصوص الفارغة طولها 0 و ليست Null .
نستطيع تحديد نص فارغ عادة عبر المعامل ""
و النتيجة واحدة لا يوجد فرق من ناحية الاداء
الدالة Empty و الدالة IsNullOrEmpty: ان استخدام الدالة بالشكل ()String.Empty يعد اسهل للقراءة و الفهم
مثال1:
PHP كود :
Dim value As String = String.Empty
If value = "" Then
MsgBox("It's Empty")
End If
If String.IsNullOrEmpty(value) Then
MsgBox("It's Null Or Empty")
End If
الدالة IsNullOrEmpty : لها العديد من الفوائد فهي تعود بقيمة منطقية في حال كان النص فارغ (Empty) او حال كان النص (Null,Nothing)
الدالة IsNullOrWhiteSpace متوفرة في الاصدار 4.5
النص الحاوي على مساحة فارغة واحدة لا يعد نص فارغ اساساً لأنه يحتوي على محرف بداخله , و في بعض الاحيان نود ان نختبر اذا كان النص يحتوي على مساحة فارغة او هو فارغ , هنا يأتي دور هذه الدالة
و للتنبيه هذه الدالة تعيد قيمة منطقية اذا تحقق الشرط , وهي تعيد True في الحالات التالية:
1- اذا كان النص فارغ (Empty).
2- اذا كان النص = Nothing
3- اذا كان النص يحتوي على مساحة واحدة فارغة مثل " "
مثال2:
PHP كود :
Dim Value1 As String = Nothing
Dim Value2 As String = " "
If String.IsNullOrWhiteSpace(Value1) Then
MsgBox(1)
End If
If String.IsNullOrWhiteSpace(Value2) Then
MsgBox(2)
End If
Dim Value3 As String = "Ahmad"
If String.IsNullOrWhiteSpace(Value3) Then
MsgBox(3)
End If
من هنا يتضح لدينا ان فرق الاداء يأتي لصالح الدالة IsNullOrEmpty
وهما متشابهتان نوعا ما في العمل مع فارق فحص المساحة الفارغة في الدالة الاخيرة مما يزيد الكلفة.
يتبع في الجزء الثاني...