مقدمة

ملاحظة

تفترض هذه الدورة خبرة مسبقة في البرمجة بالفيجوال بيسيك، يمكنك الحصول على دورات في الفيجوال بيسيك من عدة أماكن أخرى.

مع ظهور انترنت أضحت الحاجة إلى معالجة النصوص ملحة وواضحة، سواءا في ملفات HTML أو بروتوكولات الإنترنت المختلفة أو برامج المحادثة وغيرها.

وتتيح اللغات المختلفة طرقا مختلفة إلا أنها غالبا ما تكون قادرة على أداء كل ما يخطر ببالك من عمليات معالجة.

في البداية يجب أن نتعرف قليلا عن السلاسل النصية في فيجوال بيسيك، تتكون السلسلة النصية في فيجوال بيسيك من سلسلة مرقمة متتالية من الأحرف، بحيث يأخذ الحرف الأول فيها الرقم 1.

ولتخزين السلاسل النصية والتعامل معها في فيجوال بيسيك يوجد نوع بيانات خاص لذلك هو النوع string، فيمكنك مثلا أن تعرف دالة لتحتوي على سلسلة نصية كالتالي : Dim myText As String

لكي نقوم بوصل ( لحم ) أكثر من سلسلة نصية بعضها ببعض فإننا نستخدم المعامل & أو المعامل + ، ويتم إحاطة النصوص في فيجوال بيسيك بأقواس اقتباس مزدوجة ( " )، بالنسبة للثوابت يوجد ثابت واحد مهم هو vbCrLf، وهو عبارة عن ثابت السطر الجديد، إذا أردت الآن أن تضع العبارة التالية في متغيرة :

Hi,
I'm mubarmej

ستحتاج إلى كتابة الشفرة التالية لعمل ذلك :

myText = "Hi, " & vbCrLf & "I'm mubarmej"

الأساسيات

الدالة chr

chr(code)

تقوم الدالة chr بأخذ قيمة بين 0 و 255 وتعيد الحرف الممثل لهذه القيمة في جدول رموز ASCII، على سبيل المثال العبارة التالية :

Hi,
I'm "mubarmej"

ستجد أنك لا تستطيع كتابتها بهذا الشكل : myText = "Hi," & vbCrLf & "I'm "mubarmej""

لأن البرنامج سيعتقد بأن نهاية السلسة النصية السابقة هي عند علامات الاقتباس التي تقع مباشرة قبل كلمة mubarmej وستظهر لك رسالة خطأ، لذلك فإننا نلجأ لاستخدام الدالة chr حيث أن رمز علامة الاقتباس المزدوجة في جدول ASCII هو 34، فتكون الصياغة الصحيحة للعبارة البرمجية السابقة كالتالي : myText = "Hi," & vbCrLf & "I'm " & chr(34) & "mubarmej" & chr(34)

الدالة Len

Len(string)

ستجد فيما بعد حاجة في كثير من الأحيان لمعرفة طول السلسلة النصية ( عدد الأحرف )، ولعمل ذلك استخدم الدالة Len، مرر إليها النص وستعيد لك عدد الحروف. myLength = Len("mubarmej")

الدالة InStr

InStr([start ,]string1, string2[, compare])

يمكنك بواسطة هذه الدالة معرفة أول مكان يظهر فيه نص ما ضمن نص آخر أكبر منه.

الوسيطة الأولى هي وسيطة اختيارية تحدد مكان بدء البحث، أما الوسيطة الثانية string1 فتحدد السلسلة النصية التي سيتم البحث فيها، والوسيطة الثالثة string2 تحدد السلسلة النصية التي سيتم البحث عنها في السلسلة الأولى، أما الوسيطة الأخيرة فهي اختيارية أيضا وتحدد نوع المقارنة التي يجب إجرائها وهي تأخذ أحد الثوابت التالية :

·         0 - vbBinaryCompare

·         1 - vbTextCompare

والفرق بينهما هو أن الأولى تراعي حالة الأحرف والثاني لا تراعي حالة الأحرف.

في المثال التالي الدالة i ستحتوي على القيمة 1 : i = InStr("mubarmej","m")

وأما المثال التالي فستحتوي i فيه على القيمة 6 : i = InStr(2,"mubarmej","m")

حيث أن الدالة في المثال السابق ستبحث عن الحرف m بادءة من الحرف الثاني ولذلك فهي لن تجد الحرف الأول.

الدالة str

Str(number)

قد تبدو الدالة str متشابهة مع الدالة chr، إلا أنها تؤدي وظيفة مختلف تماما، فهي تحول الأرقام إلى سلاسل نصية، وهي تفيد مثلا في حال أردت أن تقوم بالتحام بين رقمين فتقوم بتحويل كل منهما إلى سلسلة نصية وتطبق بينهما جمع السلاسل ( & ) الذي يختلف عن جمع الأرقام وبالتالي تحصل على سلسلة جديدة يمكنك أن تحولها إلى رقم من جديد، على سبيل المثال الدالة myNumber تحتوي على القيمة 123456. myNumber = Str(123) & Str(456)

ستواجهك مشكلة في الشفرة السابقة حيث يقوم فيجوال بيسيك بإضافة مسافة قبل كل سلسلة نصية تنتج من الدالة السابقة، ستعرف فيما بعد كيف تعالج هذه المشكلة .

الاقتطاع

يمكنك أن تأخذ أجزاءا محددة من سلسلة نصية بعدة طرق مختلفة، يمكنك مثلا أن تحصل على الأحرف الثلاثة الأولى من بداية السلسلة النصية أو الأربعة الأخيرة أو خمسة أحرف بدءا من الحرف السادس وهكذا .

الدالة Left

Left(string, length)

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

الدالة Right

مطابقة للدالة Left في كل شيء، إلا أنها تأخذ العدد المحدد من الحروف من نهاية السلسلة.

الدالة Mid

Mid (string, start[ ,length])

تعيد الدالة Mid عددا من الأحرف قدره length بدءا من حرف معين هو start، في سلسلة نصية string لاحظ أيضا أن الوسيطة length اختيارية وإذا لم تمرر بها أي قيمة فإن الدالة ستعيد الأحرف إلى نهاية السلسلة .

في المثال التالي ستحتوي المتغيرة myText على العبارة 'm m : myText = Mid("I'm mubarmej", 2, 4)

أما في المثال التالي فستحتوي على الكلمة mubarmej : myText = Mid("I'm mubarmej", 5)

التصريح Mid

يقوم التصريح Mid باستبدال مقطع محدد من النص بنص آخر، وهو يكتب في صورة مشابهة جدا لطريقة كتابة دالة Mid ولكن توضع بعده علامة مساواة وبعدها العبارة الجديدة، في المثال التالي ستحتوي المتغيرة myText على القيمة I'm mubarmej :

name = "mubarmej"
myText = "I'm name"
Mid(myText, 5) = name

حيث سيتم حذف الجزء المحدد بالخاصية Mid ويوضع الجزء الذي بعد علامة المساواة في مكان الجزء المحذوف .

ملاحظة

يعتبر التصريح Mid عملية تحوير أكثر منها اقتطاعا.

التحوير

يمكنك عمل الكثير من التغييرات والتحويرات في السلاسل النصية، الأمر يشبه تطبيق الفلاتر على هذه النصوص وتوجد العديد من هذه الفلاتر مدمجة في الإصدارة السادسة من فيجوال بيسيك، وفيما يلي أهمها :

الدالة LCase

LCase(string)

تعيد الدالة LCase نسخة من النص string تكون فيه جميع الحروف صغيرة Lowercase المتغيرة myText في المثال التالي ستحتوي على عبارة it works :

myText = "It Works"
myText = LCase(myText)

الدالة UCase

LCase(string)

نفس الدالة السابقة لكنها تقوم بتحويل الأحرف إلى كبيرة Uppercase.

الدالة strReverse

strReverse(string)

تعيد السلسلة string معكوسة، أي تبدأ من البداية وتنتهي من النهاية، المتغيرة myText في المثال التالي ستحتوي على العبارة emoclew : myText = strReverse("welcome")

الدالة Replace

Replace(string1, string2, string3, start, count[, compare])

وتقوم باستبدال النص string2 بالنص string3 ضمن السلسلة string1، أي أنها تبحث في النص string1 عن النص string2 وعندما تجده فإنها تحذفه منه وتضع مكانه string3، ويمكن تحديد نقطة بداية البحث بالوسيطة start، وعدد مرات الاستبدال القصوى بالوسيطة count، ضع القيمة -1 لاستبدال الكل، وطريقة المقارنة بالوسيطة compare كما ذكر سابقا.

المتغيرة myText في المثال التالي ستحتوي على القيمة Hi Everyone : myText = Replace("Welcome Everyone,", "Welcome", "Hi", 1, -1)

مثال

إزالة وسوم HTML من النص

الآن بعد أن عرفت الكثير من الدوال السابقة يمكنك أن ترى مثالا على هذه الدوال، حاول أن تدقق في المثال جيدا لتعرف فكرة عمله.

تتكون نصوص HTML من جزأين هما المحتوى والوسوم، والفرق بينهما هو أن الوسوم تكون موجودة بي القوسين < و > ، الشفرة التالية عبارة عن دالة تقوم بإزالة الوسوم من ملف HTML :

ملاحظة

هذه الدالة مأخوذة بالنص من الإنترنت .

Function RemoveTags(HTML As String) As String
Dim buf As String, pos As Integer
 
pos = InStr(HTML, "<")
'check for no tags situation
If pos = 0 Then
    RemoveTags = HTML
       Exit Function
Enf If
 
Do
' Add text before the first tag to beffer
buf = buf & Left(HTML, pos - 1)
' Find end of tag
pos = InStr(HTML, ">")
' Remove everythin up to the
' end of the tag from text
If pos = 0 Then Exit Do
HTML = Mid(HTML, pos + 1)
' Find the start of the next tag
pos = InStr(HTML, "<")
If pos = 0 Then Exit Do
Loop While True
RemoveTags = buf
End Function



 

Hosted by www.Geocities.ws

1