عملگر Like برای مقایسه دو رشته کاربرد دارد.
Syntax:
result = string Like pattern
عملگر Like از قسمت های زیر تشکیل شده است:
قسمت | توضیحات |
---|---|
result | اجباری؛ هر نوع متغیر عددی |
string | اجباری؛ هر نوع عبارت رشته ای |
Pattern | اجباری؛ هر نوع عبارت رشته ای مطابق با قراردادهای تطابق الگو که در ملاحظات توضیح داده شده است. |
ملاحظات
اگر string با pattern تطبیق داشته باشد، result مقدار True خواهد داشت. اگر هیچ تطابقی وجود نداشته باشد result مقدار False خواهد داشت. اگر هر یک از result یا pattern مقدار Null داشته باشند، result مقدار Null خواهد داشت.
رفتار عملگر like به دستور Option Compare بستگی دارد. تنظیم پیش فرض برای مقایسه رشته (string comparison) در VBA برای هر ماژول Option Compare Binary (مقایسه باینری یا دودویی) می باشد.
نتایج تنظیم Option Compare Binary (مقایسه باینری) در مقایسه های رشته ای، به ترتیب طبقه بندی ( sort order ) که از باینری داخلی کارکترها ناشی می شود بستگی دارد. نحوه مرتب سازی توسط صفحه کد تعیین می شود.
در مثال زیر، یک نمونه شیوه مرتب سازی باینری متداول نمایش داده شده است:
A < B < E < Z < a < b < e < z < À < Ê < Ø < à < ê < ø
نتایج تنظیم Option Compare Text (مقایسه متنی) در مقایسه های رشته ای، بر اساس یک ترتیب طبقه بندی متنی غیرحساس به بزرگ و کوچک بودن حروف، که توسط تنظیمات منطقه ای سیستم شما تعیین می شود. وقتی شما همان حروف مثال بالا را با تنظیم Option Compare Text مرتب نمایید نتیجه زیر حاصل خواهد شد:
(A=a) < (À=à) < (B=b) < (E=e) < (Ê=ê) < (Z=z) < (Ø=ø)
تطبیق الگوی (pattern matching) داخلی کار شده در عملگر Like، یک ابزار چند منظوره برای مقایسه رشته ها فراهم آورده است. قابلیت های تطبیق الگو به شما این امکان را می دهد تا از فرانویسه ها (wildcard characters) و لیست یا محدوده ای از کاراکترها برای تطبیق رشته ها استفاده نمایید. در جدول زیر کاراکترهای مجاز در pattern (الگو) و رفتار آن ها در تطبیق رشته ها نمایش داده شده است.
کاراکتر در pattern | مطابقت در string |
? | هر تک کاراکتر. |
* | هر تعداد کاراکتر یا هیچ. |
# | هر تک عدد (0-9). |
[ charlist ] | هر تک کاراکتر که در لیست باشد. |
[ !charlist ] | هر تک کاراکتر که در لیست نباشد. |
یک گروه از یک یا چند کاراکتر ( charlist ) که در میان دو براکت ([]) قرار گرفته باشند می توانند برای تطبیق هر تک کاراکتر در string استفاده شوند و کاراکترهای درون این لیست ها می توانند تقریبا از هر کد کاراکتری (character code) و همچنین اعداد باشند.
در صورتی که با استفاده از خط تیره یا هایفن (-) مرزهای بالا و پایین یک محدوده مشخص شود، charlist می تواند بعنوان یک محدوده کاراکتری برای تطبیق داده ها بکار رود. بعنوان مثال، محدوده [A-Z]
در صورتی در تطبیق نتیجه دارد که موقعیت کاراکترهای متناظر در string شامل هر کدام از حروف بزرگ محدوده A تا Z باشد. محدوده های چندگانه می توانند در داخل براکت ها بدون استفاده از جداکننده (حائل) قرار بگیرند. بعنوان مثال [A-G O-Z]
مفهوم محدوده مشخص شده به ترتیب کاراکترها در زمان اجرا بستگی دارد (که توسط Option Compare و تنظیمات منطقه ای سیستمی که کد را اجرا می کند تعیین می شود.). برمی گردیم به مثال Option Compare Binary، محدوده [A-E]
در این تنظیم با کاراکترهای B، A یا E تطبیق دارد، باز همین محدوده در تنظیم Option Compare Text با کاراکترهای A, a, À, à, B, b, E, e تطبیق خواهد داشت. در تنظیم باینری حروف À یا à در محدوده موردنظر تطبیق ندارند چرا که در این تنظیم کاراکترهای تلفظ طبق ترتیب طبقه بندی بعد از کاراکترهای غیرتلفظی قرار خواهند گرفت
قواعد مهم دیگر حاکم بر تطبیق الگوی (pattern matching) عملگر Like به شرح ذیل می باشد:
- علامت تعجب (!) در ابتدای charlist به این معنا است که تطبیق حاصل خواهد شد اگر هر کاراکتری بجز کاراکترهای موجود در charlist در string پیدا شود.
- خط تیره یا هایفن (-) می تواند در ابتدا (بعد از علامت تعجب (!) اگر استفاده شده باشد.) یا انتهای charlist برای تطبیق خودش قرار بگیرد. در سایر مکانها، خط تیره بعنوان تعیین کننده یک محدوده از کاراکترها شناسایی خواهد گردید.
- وقتی که یک محدوده کاراکتری تعیین می شود، می بایست به ترتیب صعودی ظاهر شوند (از پایین به بالا).
[A-Z]
یک الگوی صحیح است در حالی که[Z-A]
یک الگوی ناشناخته و غیرقابل قبول می باشد.
در بعضی زبان ها، کاراکترهای خاصی در الفبای آن وجود دارد که نمایانگر دو کاراکتر مجزا می باشند. بعنوان مثال، در چندین زبان کاراکتر " æ " نمایانگر دو کاراکتر "a" و "e" وقتی که با هم می آیند می باشد. عملگر Like این کاراکترهای خاص و دو کاراکتر مجزا را معادل هم تشخیص می دهد.
وقتی یک زبان که از این کاراکترهای خاص استفاده می نماید، در تنظیمات منطقه ای سیستم انتخاب شده باشد، وقوع هر کاراکتر خاص در pattern یا string در عملیات تطبیق معادل دو کاراکتر متوالی در رشته دیگر در نظر گرفته می شود. به زبان ساده هر کاراکتر خاص در pattern که در میان دو براکت (چه به تنهایی، چه به عنوان یک لیست و چه بعنوان یک محدوده) قرار گرفته باشد، معادل دو کاراکتر متوالی در string تطبیق می شود.
مثال
این مثال از عملگر Like برای مقایسه یک رشته ( string ) با الگو ( pattern ) استفاده می نماید.
Dim MyCheck
MyCheck = "aBBBa" Like "a*a" ' مقدار بازگشتی: True
MyCheck = "F" Like "[A-Z]" ' مقدار بازگشتی: True
MyCheck = "F" Like "[!A-Z]" ' مقدار بازگشتی: False
MyCheck = "a2a" Like "a#a" ' مقدار بازگشتی: True
MyCheck = "aM5b" Like "a [L-P]#[!c-e]" ' مقدار بازگشتی: True
MyCheck = "BAT123khg" Like "B?T*" ' مقدار بازگشتی: True
MyCheck = "CAT123khg" Like "B?T*" ' مقدار بازگشتی: False
MyCheck = "ab" Like "a*b" ' مقدار بازگشتی: True
MyCheck = "a*b" Like "a [*]b" ' مقدار بازگشتی: False
MyCheck = "axxxxxb" Like "a [*]b" ' مقدار بازگشتی: False
MyCheck = "a [xyz" Like "a [[]*" Like "a [[]*" ' مقدار بازگشتی: True
MyCheck = "a [xyz" Like "a [[]*" Like "a [*" ' خطای ۹۳ (الگوی نامعتبر).
منبع
بیشتر بخوانید
دستور Dim: اعلان متغیرها و اختصاص فضای حافظه
انواع داده VBA: راهنمای انواع داده و محدوده مقادیر آنها
عملگر Like: مقایسه و تطبیق رشته ها با یکدیگر در VBA
دستور Option Explicit | نحوه اعلان متغیرها در ویژوال بیسیک
دستور ReDim | تغییر اندازه و ابعاد آرایه پویا در ویژوال بیسیک