المشاركات : 662
المواضيع 39
الإنتساب : Feb 2014
السمعة :
195
الشكر: 1474
تم شكره 1740 مرات في 622 مشاركات
12-12-16, 01:05 AM
(آخر تعديل لهذه المشاركة : 12-12-16, 01:25 AM {2} بواسطة ابو ليلى.)
التعامل مع النصوص في 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)
هنا استخدمنا الدالة Concat لعملية تجميع النصوص
مثال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)
النتيجة من المثال عرض الكلمة Every
مثال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)
في هذا المثال تم حذف الكلمة Every اعتماداً على الدالة Length التي تعيد طول الكلمة في المتغير MiddleName .
مثال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)
في هذا المثال استخدمنا وسيطة واحد في عملية الحذف و هي Index
المثال يستخدم الدالة 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
وهما متشابهتان نوعا ما في العمل مع فارق فحص المساحة الفارغة في الدالة الاخيرة مما يزيد الكلفة.
يتبع في الجزء الثاني...
اللهم لك الحمد كما ينبغي لجلال وجهك و عظيم سلطانك
في حل و ترحال
تم الشكر بواسطة: جميل علي , جميل علي , amgad525 , amgad525 , الشاكي لله , الشاكي لله , ابو ابراهيم , طـلال , محمد كريّم , السندبااد , sherf , ali777 , الماجيك مسعد
المشاركات : 264
المواضيع 16
الإنتساب : Oct 2015
السمعة :
40
الشكر: 781
تم شكره 634 مرات في 219 مشاركات
بارك الله فيك استاذي ابوليلى
موضوع مفيد جدا جدا جدا ( السهل الممتنع )
ارجو من مشرف القسم تثبيت الموضوع
زادك الله من علمه ورزقك من حيث لا تحتسب
اللهم يا ارحم الراحمين ارحم اخي اباليث رحمة واسعة
المشاركات : 93
المواضيع 0
الإنتساب : Sep 2013
السمعة :
13
الشكر: 598
تم شكره 119 مرات في 69 مشاركات
استفدنا من طرحك المفيد
بارك الله فيك وفي عملك اخي ابو ليلى
Mish3l
المشاركات : 1,561
المواضيع 264
الإنتساب : Sep 2013
السمعة :
29
الشكر: 653
تم شكره 1044 مرات في 408 مشاركات
موضوع روعه ومنظم جدا احييك علي ذلك
بارك الله فيك
المشاركات : 662
المواضيع 39
الإنتساب : Feb 2014
السمعة :
195
الشكر: 1474
تم شكره 1740 مرات في 622 مشاركات
12-12-16, 04:39 PM
(آخر تعديل لهذه المشاركة : 12-12-16, 04:42 PM {2} بواسطة ابو ليلى.)
استكمالاً لما سبق...
فحص بداية النص و فحص نهايته
الدوال StartsWith-EndsWith
الدالة StartsWith
تحتاج في الكثير من الاحيان الى فحص نص ما اذا ما كان يبدأ بحرف او بكلمة ما و لهذه المهمة نستخدم الدالة StartsWith وهي تعيد قيمة منطقية اما True في حال وجدتها او False في حال لم تجدها.
و تجدر الاشارة الى ان الدالة حساسة لحالة الاحرف (Case Sensitive)
و يمكنك التغلب على الحساسية الزائدة لهذه الدالة عبر تمرير OrdinalIgnoreCase ضمن الوسائط
بالشكل العام تستخدم وسيطة واحدة فقط و هي اسم النص او الحرف المراد فحصه ضمن الجملة
مثال1:
PHP كود :
Dim Selecting As String = "Select Some Fileds" If Selecting.StartsWith("Select") Then MsgBox("Found...") End If
في هذا المثال فحصنا كلمة كاملة مع مراعاة حالة الاحرف.
مثال2:
PHP كود :
Dim Selecting As String = "Select Some Fileds" If Selecting.StartsWith("S") Then MsgBox("Found...") End If
هذا المثال فحصنا حرف واحد فقط مع مراعاة حالة الاحرف.
مثال3:
PHP كود :
Dim Selecting As String = "Select Some Fileds" If Selecting.StartsWith("select", StringComparison.OrdinalIgnoreCase) Then MsgBox("Found...") End If
في هذا المثال فحصنا كلمة مع عدم مراعاة حالة الاحرف (من دون حساسية)
مثال4:
كما و يمكنك الفحص وفق طريقة اخرى فقط على مستوى حرف و هي حساسة للأحرف.
PHP كود :
Dim Selecting As String = "Select Some Fileds" If Selecting.Length >= 1 And Selecting(0) = "S" Then MsgBox("Found...") End If
الدالة EndsWith : عكس الدالة السابقة تقوم بفحص نهاية الجملة و تختبر النص المرسل او الحرف , و ايضاً هي حساسة لحالة الاحرف
نفس الامثلة السابقة تنطبق على هذه الدالة و لنأخذ مثال جديد و شائع الاستخدام و مطلوب أيضا بكثرة.
مثال1:
من الامثلة على ذلك فحص روابط الويب , كما تعرف هناك شيئ يميز روابط الويب وهي تنتهي بأحد الدومينات مثل (Com,Net,Org)..وغيرها
من الجيد وجود مثل هذه الدالة لنقوم عن طريقها بالفحص و لتتضح لك الامور اكثر نأخذ هذا المثال
PHP كود :
Dim Link As String = "http://vb4arb.com" Dim array() As String = {".net", ".org", ".com"} For Each elem As String In array If Link.EndsWith(elem) Then MsgBox(elem) End If Next
المصفوفة تحتوي على القيم المراد فحصها في الرابط , و القيمة المعادة ستكون .com لانها تحقق الشرط.
نفس الكلام عن حساسية الاحرف يمكنك استخدام OrdinalIgnoreCase كوسيطة ثانية.
مقارنة النصوص الدالة
String.Equals : دالة تستخدم لمقارنة نصين و تعيد قيمة منطقية و يمكن كتابتها بأكثر من شكل , لنجلي الغموض عبر بعض الامثلة.
مثال1:
PHP كود :
Dim B1 As String = "AboLayla" Dim B2 As String = "AboLayla" MsgBox(B1.Equals(B2))
مثال2:
PHP كود :
Dim B1 As String = "AboLayla" Dim B2 As String = "AboLayla" MsgBox(String.Equals(B1, B2))
القيم المعادة في المثال الاول و الثاني هي True و هي تدل على التساوي.
مثال3:
PHP كود :
Dim B1 As String = "AboLayla" Dim B2 As String = "AboLayla" If B1 = B2 Then MsgBox("Equals...") End If
تعطي نفس عمل الدوال السابقة تماماً
مثال4:
PHP كود :
Dim B1 As String = "AboLayla" Dim B2 As String = "AboLayla" If String.ReferenceEquals(B1, B2) Then MsgBox("Same Reference...") Else MsgBox("Not Same Reference...") End If
هنا استخدمنا الدالة ReferenceEquals لمعرفة اذا كان المتغيران يشيران الى نفس المرجع (نفس المكان في الذاكرة)
مثال5:
PHP كود :
Dim B1 As String = "AboLayla" Dim B2 As String = "AboLayla" If String.Compare(B1, B2) = 0 Then MsgBox("Compare Equals...") End If
و اخيراً باستخدام الدالة Compare.
تنسيقات النص وفق الدالة
String.Format : التعامل مع هذه الدالة معقد بعض الشيئ لوجود الكثير من انواع التنسيقات , بإمكانك وفق هذه الدالة استخراج تنسيقات مختلفة للنصوص و الارقام و التواريخ ايضاً.
لندخل في مثال عملي مع الشرح
مثال1:
PHP كود :
Dim name As String = "Vb For Arab" Dim number As Integer = 100 Dim Datee As DateTime = DateTime.Now Dim result As String = String.Format("{0}: {1:0.0} - {2:dd/MM/yyyy}", name, number, Datee) MsgBox(result)
لنأتي الى وسائط String.Format و نشرحها بشيئ من التفصيل
الوسيطة الاولى {0}: وهي تعني اول متغير بعد الفاصلة سيحل هنا و في حالتنا سيكون name, اما الرمز : فهو فاصل بين الوسيطة الاولى و الوسيطة الثانية .
الوسيطة الثانية {1:0.0}- وهي مقسومة لقسمين كما ترى الرقم 1 سيحل مكانه المتغير الثاني بعد الفاصلة و هو number اما 0.0 فهي تعني تنسيق الرقم كما تلاحظ هو Decimal أي رقم بفواصل,اما الاشاره - فهي مجرد فاصل بعد التنسيق.
الوسيطة الثالثة {2:dd/MM/yyyy} كذلك مقسومة لقسمين , الرقم 2 يشير الى المتغير الثالث بعد الفاصلة و هو Datee و باقي القسم هو شكل تنسيق التاريخ الذي نريده,بامكانك استخلاص أي تنسيق للتاريخ كما تريد.
الناتج من المثال السابق
Vb For Arab:100.0-12/12/2016
من تنسيقات الارقام المشهورة المعروف % (بالمئة) او Percentage للحصول على مثل هذا التنسيق يجب ان يكون لدينا رقم بالتنسيق Double ومن بعدها يمكننا استخدام التالي
PHP كود :
Dim Perc As Double = 0.96 Dim result As String = String.Format("{0:0.0%}", Perc) MsgBox(result)
تقسيم النص الى اجزاء مع الدالة
Split: تستخدم هذه الدالة عادة في تقسيم النص الى اجزاء وفق معيار محدد (المسافات بين الكلمات,الفواصل ,...الخ),و من ثم يتم نسخ الاجزاء الى مصفوفة , وبعد ذلك يمكنك استخدام حلقة للمرور على عناصر المصفوفة و جلب البيانات.
مثال1:
PHP كود :
Dim Name As String = "Home Site Vb For Arab" Dim words As String() = Name.Split(New Char() {" "c}) Dim word As String For Each word In words MsgBox(word.ToString) Next
استخدمنا المعيار (مسافات فارغة بين الكلمات)
الناتج من المثال السابق
Home
Site
Vb
For
Arab
ومن الامثلة الشهيرة على التقسيم هي مسارات الملفات و المجلدات حيث يمكنك استخدام المعيار(\) لتقسيم نص المسار و الحصول على كل المجلدات التي في رابط المسار
مثال2:
احياناً قد تواجه بعض الادخالات الفارغة في نص ما و استخدام الدالة بشكلها السابق سيؤدي الى جلب الادخالات الفارغة , عندها يتوجب عليك استخدام RemoveEmptyEntries كوسيطة اضافية للتخلص من الادخالات الفارغة.
PHP كود :
Dim Names As String = "nabil,Ahmad,,,Sami" Dim elements() As String = Names.Split(New Char() {","c}, StringSplitOptions.RemoveEmptyEntries) For Each element As String In elements MsgBox(element) Next
تحويل النص الى مصفوفة محارف مع الدالة
ToCharArray : ببساطة هذه الدالة تقوم بتحويل النص الى مصفوفة من المحارف عدد عناصرها يساوي طول النص ,او عدد محارف النص.
مثال1:
PHP كود :
Dim name As String = "Nabil Ahmad Soleman" Dim array() As Char = name.ToCharArray For Each element As Char In array MsgBox(element) Next
تحويل حالة احرف النص الى النمط حروف صغيرةمع الدالة.
TowLower :تستخدم لتحويل حالة الاحرف في نص ما الى احرف صغيرة , و استخدامها بسيط جداً.
مثال1:
PHP كود :
Dim Myname As String = "Nabil Ahmad Soleman" Dim array() As Char = Myname.ToLower() For Each element As Char In array MsgBox(element) Next
تحويل حالة الاحرف الى حالة الاحرف الكبيرة مع الدالة
ToUpper : عكس الدالة السابقة و تستخدم بنفس الطريقة ايضاً.
مثال1:
PHP كود :
Dim Myname As String = "Nabil Ahmad Soleman" Dim array() As Char = Myname.ToUpper For Each element As Char In array MsgBox(element) Next
ازالة الفراغات من النصوص عبر الدوال
Trim-TrimStart-TrimEnd- تستخدم هذه الدوال لازالة المسافات الفارغة في أي نص
فالدالة Trim تقوم بازالة الفراغات من اول النص و من اخره و باستخدامها انت تستغني عن الدالتين الباقيتين.
بينما تقوم الدالتان TrimStart-TrimEnd
بإزالة الفراغات من اول النص و من اخره كل واحدة كما هو واضح حسب اسمها.
و افضل استخداماتها لضبط ادخالات المستخدم.
فعندما يكون لديك برنامج يعتمد على تلقي الادخالات من المستخدم فيجب ان تحسب حساب ان يكون المستخدم من هواة الضغط على مفتاح Space (عنده فوبيا الفراغات..)
عندها ستصبح بياناتك بلا معنى..؟
مثال1 Trim:
PHP كود :
Dim value As String = " This is an example string. " value = value.Trim()
احياناً يكون النص يحتوي في نهايته على رموز مثل(..,؟,!) او غير ذلك.
و انت لا تريد لهذه الرموز ان تخزن او تريد التخلص منها.
الحل موجود مع الوسائط الاضافية للدالة TrimEnd.
مثال2 TrimEnd:
PHP كود :
Dim Myarray(1) As String Myarray(0) = "What's Your Name?" Myarray(1) = "My name's pla pla... " For Each element As String In Myarray Dim TrmEnd As String = element.TrimEnd("?", ".", " ") MsgBox(TrmEnd) Next
كما تلاحظ وسائط يمكن تمريرها للدالة TrimEnd مهمتها ازالة هذه الرموز من اخر النص (مسافات فارغة – نقط-استفهام...الخ)
لم ينتهي الحديث هنا, مازال لدي ما اخبرك به في بعض الاحيان تود ان تزيل من بداية النص رموز ايضاً او حتى محارف (احرف) بالإضافة للمسافات الفارغة كذلك.
سأعمل هنا بطريقة مختلفة حيث سيكون لدي مصفوفة تحتوي على الرموز و الحروف المراد ازالتها و من ثم سأمرر مصفوفة الرموز الى الدالة TrimStart.
مثال3 TrimStart:
PHP كود :
Dim text As String = ".?. Hello Every One" Dim array(2) As Char array(0) = "." array(1) = " " array(2) = "?" text = text.TrimStart(array) MsgBox(text)
تم ازالة كل الرموز التي في النص اعتماداً على معطيات المصفوفة.
اذا اردت ازالة احرف انتبه لحساسية الاحرف حالة TrimEnd حساسة لحالة الاحرف.
يتبع..........
اللهم لك الحمد كما ينبغي لجلال وجهك و عظيم سلطانك
في حل و ترحال
المشاركات : 662
المواضيع 39
الإنتساب : Feb 2014
السمعة :
195
الشكر: 1474
تم شكره 1740 مرات في 622 مشاركات
12-12-16, 10:32 PM
(آخر تعديل لهذه المشاركة : 12-12-16, 10:49 PM {2} بواسطة ابو ليلى.)
دوال خاصة للتعامل مع النصوص
توجد بعض الدوال الخاصة للتعامل مع النصوص سنقوم بالمرور على بعضها.
الدالة Cstr :
تقوم هذه الدالة بتحويل القيم الى الحالة النصية لها و هي تعالج انواع مثل (Integer,Boolen,Char)
مثال1:
PHP كود :
Dim str As String = CStr(5) str = CStr(True) str = CStr("m"c)
دالة بسيطة و لها فوائد.
الدالتان LSet-RSet
و الدالتان PadLeft-PadRight
نستخدمها لإضافة هوامش(مسافات فارغة)الى يسار النص او الى يمينه
مثال1:
PHP كود :
MsgBox(LSet("Example", 10)) MsgBox(RSet("Example", 16))
هما مشابهتان للدالتان PadLeft-PadRight تقريباً.
مثال2:باستخدام PadLeft
PHP كود :
Dim SomeWords() As String = {"Cat", "Samer", "Vb4"} For Each word As String In SomeWords MsgBox(word.PadLeft(5)) Next
كذلك أيضا تمكنك الدالتان PadLeft-PadRight من اضافة محارف ليسار و يمين النص.
مثال3:
PHP كود :
txt1.Text = ("One".PadLeft(6, "."c)) txt1.Text = ("PassWord".PadRight(12, "*"c))
تلاحظ وجود وسيطتين , الاولى عبارة عن رقم يعبر عن الطول الكلي للنص وهو 6 , و الثانية عبارة عن الرمز (.) كمحرف و الاضافة الى يسار النص
و عليه نكتشف ان الرمز (.) سيضاف 3 مرات الى يسار النص ليصبح طول النص = 6
نفس الكلام ينطبق على السطر الثاني فقط الاضافة تأتي الى يمين النص (اكتشف كم مرة سنضيف الرمز *)
اضافة سطر جديد لنص ما عبر الطريقة
Environment.NewLine
نستخدمها لإضافة سطر جديد لنص ما و ذلك لتقسيم النص الى عدة اسطر و هي سهلة الاستخدام و مشابهة تماما للطريقة التقليدية التي تستخدم (VbCrlF).
مثال1:
PHP كود :
Dim Msg As String = "Hello.." + Environment.NewLine + " My Friends..." Dim Msg2 As String = "Hello.." + vbCrLf + " My Friends..." MsgBox(Msg)
تخزين النصوص في المصفوفات
او تحويل النصوص الى مصفوفات
مر معنا سابقا تحويل النص الى مصفوفة من المحارف.
الان حديثنا يختلف نوعا ما في بعض المواضع.
Convert String To Byte Array
تحويل النص الى مصفوفة من النوع بايت يسير و فعال عبر الدوال التي توفرها اللغة.
توفر اللغة الدالة ()ASCII.GetBytes
و هي تستقبل وسيطة من النوع النصي و تعيد لنا مصفوفة من النوع Byte.
مثال1:
PHP كود :
Dim Nmae As String = "AboLayla" Dim array() As Byte = System.Text.Encoding.ASCII.GetBytes(Nmae) For Each bt As Byte In array txt1.AppendText(bt.ToString + " = " + ChrW(bt) + Environment.NewLine) Next
الناتج من الكود السابق
65 = A
98 = b
111 = o
76 = L
97 = a
121 = y
108 = l
97 = a
كما ترى في المثال تم ترميز كل حرف في المصفوفة و بناءً عليه يمكننا تخزين البيانات الى ملف Binary عبر الطريقة BinaryWriter
و بطريقة عكسية يمكننا الحصول الى ما بداخل المصفوفة السابقة اذا عرفنا رموزها .. كما ترى في الاعلى و لنجرب باستخدام الدالة ()ASCII.GetString
مثال2:
PHP كود :
Dim array() As Byte = {65, 98, 111, 76, 97, 121, 108, 97} Dim Name As String = System.Text.ASCIIEncoding.ASCII.GetString(array) txt1.Text = Name
كما يمكنك جلب المحارف من المصفوفة السابقة ByteArray وفق الدالة ASCII.GetChars
مثال3:
PHP كود :
Dim Chr() As Char = System.Text.Encoding.ASCII.GetChars(array) For Each ch As Char In Chr MsgBox(ch) Next
تحويل النص الى قائمة
Convert String To List
اذا احتجت في يوم من الايام لتحويل النص الى قائمة فالعملية سهلة ان شاء الله.
مثال1:
PHP كود :
Dim Words As String = "Vb,For,Arabs" Dim arry() As String = Words.Split(",") Dim vals As List(Of String) = arry.ToList() For Each val As String In vals MsgBox(val) Next
في هذا المثال افترضت ان لدي نص و يوجد بها فاصل بين الكلمات و استخدمت الدالة Split للتخلص من الفواصل وخزنت الكلمات في المصفوفة array ومن ثم استخدمت الطريقة ()Arry.Tolist لتخزينهم في القائمة vals .
ثم قمت بعرضهم وفق حلقة For للتأكد منهم.
توليد نصوص عشوائية
Random String
من باب ذكر المعلومة فقط احببت اضافتها
تحتاج احيانا الى توليد نصوص عشوائية بطرق بسيطة للاستفادة منها في مجالات شتى ,على سبيل المثال لتخزنها كمفاتيح للبيانات
و من احدى الطرق البسيطة استخدام الدالة
Path.GetRandomFileName تولد هذه الطريقة نص بطول 11 محرف 8 احرف صغيرة فقط مع لاحقة عشوائية لاسم الملف و يمكننا ازالة اللاحقة و الحصول على 4 محارف الاضافية ليصبح طول النص المولد 11 محرف وهو عدد مناسب نوعا ما
مثال1:
PHP كود :
Dim value As String = "" Dim px As String = "" For i = 0 To 15 px = Path.GetRandomFileName() px = px.Replace(".", "") value = px MsgBox(value) Next
اتمنى ان اكون وفقت في تقديم شيئ مفيد , يغطي طرق التعامل مع النصوص بما يخدم عملنا.
لا تنسونا من دعواتكم, و الله الموفق.
(12-12-16, 01:18 AM)جميل علي كتب : بارك الله فيك استاذي ابوليلى
موضوع مفيد جدا جدا جدا ( السهل الممتنع )
ارجو من مشرف القسم تثبيت الموضوع
زادك الله من علمه ورزقك من حيث لا تحتسب
جزالك الله خيراً اخي جميل و زادك رزقا وعلما
(12-12-16, 10:19 AM)tryold كتب : استفدنا من طرحك المفيد
بارك الله فيك وفي عملك اخي ابو ليلى
و بك بارك الله اخي مشعل جزاك الله خيراً
(12-12-16, 12:21 PM)ali.alfoly كتب : موضوع روعه ومنظم جدا احييك علي ذلك
بارك الله فيك
شكراً اخي علي و بارك الله بك ايضاً وجزاك خيراً
اللهم لك الحمد كما ينبغي لجلال وجهك و عظيم سلطانك
في حل و ترحال
المشاركات : 191
المواضيع 8
الإنتساب : Feb 2015
السمعة :
8
الشكر: 243
تم شكره 242 مرات في 129 مشاركات
ما شاء الله لاقوة الا بالله اللهم اجعل جهدك في ميزان حسناتك و زادك من فضله و علمه
هَٰٓؤُلَآءِ قَوْمُنَا ٱتَّخَذُوا۟ مِن دُونِهِۦٓ ءَالِهَةً لَّوْلَا يَأْتُونَ عَلَيْهِم بِسُلْطَٰنٍۭ بَيِّنٍ فَمَنْ أَظْلَمُ مِمَّنِ ٱفْتَرَىٰ عَلَى ٱللَّهِ كَذِبًا
المشاركات : 12
المواضيع 0
الإنتساب : Oct 2017
السمعة :
0
الشكر: 19
تم شكره 10 مرات في 5 مشاركات
المشاركات : 211
المواضيع 65
الإنتساب : Jun 2018
السمعة :
4
الشكر: 181
تم شكره 176 مرات في 103 مشاركات
ربنا يتقبل منك يارب ويجعله صدقة جارية لك موضوع مميز والأميز البساطة
المشاركات : 11
المواضيع 4
الإنتساب : Mar 2015
السمعة :
0
الشكر: 9
تم شكره 4 مرات في 3 مشاركات
مشاء الله عليك تقبل الله منك وجعله في ميزان حساناتك
|