الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

الفئة Stringbuilder

بدأه محمد سامر أبو سلو في 17 أغسطس 2008 · 0 رد · 526 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1

تخزن الفئة StringBuilder سلاسل نصية ديناميكية وتقدم لنا طرائق للتعامل معها وهي تعتبر أسرع بكثير من الفئة String ولكنها تستخدم قدرا من الذاكرة أكبر بشكل ملحوظ من تلك التي تستخدمها الفئة String وحتى تستطيع استخدام الفئة StringBuilder في مشروعك عليك إضافة مرجع لمجال الأسماء System.Text وبافتراض أنك قمت باستيراد مجال الأسماء المذكور يمكننا تعريف متغير يشير إلى تلك الفئة

Dim txt As New StringBuilder

وبما أنها تتعامل مع سلاسل نصية ديناميكية فيعتبر من الجيد تعريف حجم النص الذي ستقوم بتخزينه فيها مسبقا وتكون السعة الافتراضية 16 محرفا وهذه السعة تتضاعف تلقائيا في كل مرة تقوم بتجاوزها ولضبط هذه السعة نقوم بضبط قيمة الخاصية Capacity.

ولإنشاء كيان جديد من الفئة StringBuilder يمكنك استدعاء باني الفئة بدون تمرير أية محددات أو تمرير قيمة نصية افتراضية

Dim txt As New StringBuilder("some string")

وإن كنت قادرا على تقدير طول النص الذي ستقوم بتخزينه يمكنك تمرير هذه القيمة لباني الفئة وبهذا لم يعد هناك تغييرات مستمرة في السعة عند تخزين المحارف في StringBuilder

Dim txt As New StringBuilder(initialCapacity)

ومع ذلك فالسعة التي قمت بتحديدها ليست نهائية إذ يمكن أن تتغير أثناء التنفيذ وستقوم الفئة StringBuilder بضبط قيمة السعة آليا وإن كنت ترغب بتحديد سعة عظمى لما سيتم تخزينه يمكنك استخدام الباني التالي

Dim txt As New StringBuilder( initialCapacity, maxCapacity)

وعندما تريد إنشاء كيان جديد من الفئة StringBuilder مستخدما كلا من السعة الابتدائية والسعة العظمى والقيمة الابتدائية يمكنك استخدام باني الفئة بالشكل التالي

Dim txt As New StringBuilder( string, initialCapacity, maxCapacity)

رأينا حتى الآن خاصيتان أساسيتان للفئة StringBuilder هما Capacity و MaxCapacity وإضافة لهما تقدم لنا هذه الفئة الخصائص Length و Chars والتي تماثل الخصائص التي تحمل نفس الاسم في الفئة String فالخاصية Length تعيد عدد المحارف في الكيان الحالي للفئة StringBuilder والخاصية Chars تعيد مصفوفة محارف وعكس الخاصية Chars الخاصة بالفئة String فهذه الخاصية قابلة للقراءة والكتابة ويكون ترتيب العنصر الأول في هذه المصفوفة هو الصفر وتمتلك الفئة StringBuilder العديد من الطرائق المماثلة لتلك التي تحمل نفس الاسم في الفئة String ولكنها تتعامل مباشرة مع النص الذي يتم تطبيقها عليه ولاتعيد سلسلة نصية جديدة

Append

تضيف الطريقة Append نوعا أساسيا للكيان الحالي للفئة StringBuilder وتكون صيغتها على الشكل التالي حيث يمكن أن يكون المحدد value محرف مفرد أو نص أو تاريخ أو أية قيمة رقمية

SB.Append(value)

فعندما تقوم بإضافة قيمة رقمية إلى StringBuilder يتم تحويلها إلى نص ثم يتم إضافتها إلى النص المخزن في StringBuilder كما يمكن إضافة قيمة من النوع Object إلى StringBuilder حيث تكون القيمة الفعلية المضافة هي القيمة المعادة من الخاصية ToString العائدة لـ Object كما يمكنك إضافة مصفوفة محارف مستخدمين الصيغة التالية

SB.Append(chars, startIndex, count)

أو يمكنك إضافة قسم من نص بتحديد مكان بدء ذلك القسم وعدد المحارف المراد إضافتها

SB.Append(string, startIndex, count)

AppendFormat

الطريقة AppendFormat مشابهة للطريقة Append إلا أنها تقوم بتنسيق النص قبل إضافته ويكون للنص المضاف تحديد معين للتنسيق إضافة إلى قيمته وتكون الصيغة العامة للطريقة AppendFormat كما يلي

SB.AppendFormat(string, values)

والمحدد الأول يكون نص يحدد خصائص التنسيق و values تكون عبارة عن مصفوفة من القيم واحدة من أجل كل تحديد تنسيق معين وفي المحدد string إذا كان لديك عدد قليل من القيم لتنسيقها وحتى أربعة قيم يمكنك تمريرها كمحددات منفصلة مفصولة بفاصلة

SB.AppendFormat(string, value1, value2, value3, vlaue4)

والكود التالي يضيف النص Your balance as of Thursday, August 2, 2007 is $19,950.40 للمتغير StringBuilder

Dim statement As New StringBuilder
statement.AppendFormat( _
		  "Your balance as of {0:D} is ${1: #,###.00}", _
		  #8/2/2007#, 19950.40)

وكل تحديد لصيغة يتم حصره بقوسين من الشكل {} ويتم ترقيمهم بالتسلسل ابتداء من الصفر ثم تتبع فاصلتهم بالتحديد الفعلي والتنسيق D بخبر الطريقة AppendFormat للقيام بتنسيق النص المحدد بتنسيق التاريخ الطويل والتنسيق الثاني يستخدم فاصل الآلاف وعددان عشريان بعد الفاصلة العشرية من أجل القيمة حيث يضيف الكود التالي نفس النص ولكنها تمرر القيم عبر مصفوفات

Dim statement As New StringBuilder
Dim values() as Object = {#8/2/2007#, 19950.4}
statement.AppendFormat( _
		 "Your balance as of {0:D} is ${1:#,###.00} ", values)

وفي كلتا الحالتين سيحمل المتغير statement نصا كما يلي

Your Balance as of Thursday, August 2, 2007 is $19,950.40

Insert

تضيف هذه الطريقة نصا للكيان الحالي للفئة StringBuilder وتكون صيغتها

SB.Insert(index , value)

حيث أن المحدد index يحدد المكان الذي سيتم إدراج النص الجديد فيه و value هو النص الذي سيتم إدراجه وكما في الطريقة Append يمكن أن تكون value من النوع Object وتكون بالتالي القيمة المدرجة هي القيمة المعادة من الطريقة ToString العائدة لـ Object الأمر الذي يعني أنه يمكنك استخدام الطريقة Insert لإدراج قيم عددية وتواريخ مباشرة ضمن المتغير من النوع StringBuilder وتمكننا صيغة معدلة قليلا من الطريقة Insert من إدراج عدة نسخ من نص معين ضمن StringBuilder

SB.Insert(index, string, count)

كما يمكن استخدام Insert لإدراج مصفوفة محارف في موقع محدد بالمحدد index في الكيان الحالي لـ StringBuilder حيث أن المحدد chars هو عبارة عن مصفوفة محارف

SB.Insert(index, chars)

Remove

هذه الطريقة تزيل عددا من المحارف من StringBuilder الحالي بدءا من موقع محدد وتكون صيغتها كالتالي حيث أن المحدد startIndex هو موقع أول محرف ستتم إزالته من النص والمحدد count هو عدد المحارف التي سيتم إزالتها

SB.Remove(startIndex, count)

Replace

هذه الطريقة تقوم باستبدال جميع تواجدات نص ضمن StringBuilder بنص آخر وتكون صيغتها كالتالي حيث يمكن أن تكون قيمة أي من المحددين نصا أو محرفا

SB.Replace(oldValue, newValue)

وعكس ما يحصل في الفئة String فعملية الاستبدال تتم في الكيان الحالي للفئة StringBuilder وهذه الطريقة لا تعيد نصا آخر كما يمكننا استخدام شكل آخر من الطريقة Replace لتحديد الاستبدالات في قطعة محددة من كيان StringBuilder

SB.Replace(oldValue, newVlaue, startIndex, count)

هذه الطريقة تستبدل جميع تواجدات oldValue بقيمة newVlaue في القسم المحدد وبدايته من startIndex ويمتد عددا من المحارف بقيمة count ابتداء من ذلك الموقع الابتدائي

ToString

تستخدم هذه الطريقة لتحويل كيان StringBuilder إلى String وضبط القيمة المعادة في متغير من النوع String وهي تعيد نصا يمثل القيمة المحتواة في المتغير من النوع StringBuilder التي تم تطبيقها عليها

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

مواضيع مشابهة