با سلام
از آنجایی که بنده علاقه زیادی به بحث رشته ها ( به نوعی پردازش متن ) دارم ، تصمیم گرفتم که قسمت دوم مقاله رو هم بنویسم تا مقاله کاملتر باشه ...
دستکاری رشته ها ( قسمت دوم )
در قسمت اول مقاله توابعی نظیر " Copy " ، " Delete " ، " Pos " و " Trim " و ... توضیح داده شدند ...
در قسمت دوم مقاله توابعی را بررسی می کنیم که کمی نسبت به توابع قسمت اول که معمولا چند نسخه از آنها در هر برنامه ای به کار می رود گمنام تر هستند و برای کارهای تقریبا خاصی به کار می روند اما بسیار جال و مفید هستند ...
توابعی که در این مقاله بررسی خواهیم کرد :
- 1. Insert(Source: string; var S: string; Index: Integer);
- 2. ReverseString(const AText: string): string;
- 3. DupeString(const AText: string; ACount: Integer): string;
- 4. StuffString(const AText: string; AStart, ALength: Cardinal; const ASubText: string): string;
- 5. RandomFrom(const AValues: array of string): string;
- 6. LeftStr(const AText: AnsiString; const ACount: Integer): AnsiString;
- 7. RightStr(const AText: AnsiString; const ACount: Integer): AnsiString;
- 8. MidStr(const AText: AnsiString; const AStart, ACount: Integer): AnsiString;
قبل از شروع بررسی توابع باید این نکته رو ذکر کنم که به جز تابع Insert، کلیه توابع بالا در یونیت StrUtils قرار دارند ، پس برای استفاده از آنها باید این یونیت رو به قسمت Uses اضافه کنید ...
بررسی توابع ...
متد Insert :
این متد ( Procedure ) یک رشته را در یک رشته دیگر می نویسید ، این متد دارای 3 پارامتر به شرح زیر است :
1. SubStr : این قسمت مربوط به رشته ای است که باید به رشته اصلی اضافه شود ( String )
2. Dest : این قسمت مربوط به رشته اصلی است ( String )
3. Index : در این قسمت مشخص میکنید که رشته ای که باید اضافه شود از چندمین حرف شروع شود ! ( به مثال توجه کنید )
مثال :
فرض کنیم رشته ای داریم با مقدار " Mahmood " ، و میخواهیم حرف " N " را به عنوان چهارمین حرف آن قرار دهیم ، باید به صورت زیر بنویسیم :
var
S, S2 : String;
begin
S := 'Mahmood';
S2 := 'N';
Insert(S2, S, 4);
end;
توجه داشته باشید که شما مقدار برگشتی از این تابع نمی گیرید ، بلکه متغیر S ( که در قسمت Dest قرار دارد ) پس از اجرای این دستور مقدار حاصل را خواهد داشت ( در اینجا : MahNmood )
تابع ReverseString :
این تابع یک مقدار String را برعکس می کند و حاصل را به صورت String به عنوان خروجی تحویل میدهد ...
این تابع یک پارمتر به نام AText دارد که مقدار String مورد نظر در آن قرار میگیرد ، بر خلاف تابع Insert ، این تابع حاصل را به صورت String به عنوان خروجی برگشت می دهد ...
مثال :
اگر متغیر S دارای مقدار " Mahmood " باشد با دستور زیر به " doomhaM " تغییر پیدا میکند ...
ReverseString(S);
تابع DupeString :
این تابع یک رشته را به تعداد مشخص تکرار می نماید ، این تابع دو پارامتر دارد ، اولین پارامتر با نام AText مقدار رشته اصلی و دومین پارامتر با نام ACount تعداد دفعات تکرار را می گیرند ...
مثال :
فرض کنیم متغیر S دارای مقدار " MN " باشد ، پس از اجرای این دستور با مقدار 2 در پارامتر دوم ، مقدار متغیر M ( که از نوع String شده ) " MNMN " خواهد بود ...
M := DupeString(S, 2);
تابع StuffString :
این تابع رشته A را در رشته ی B به جای قسمتی خاص از رشته B قرار می دهد ، این تابع چهار پارامتر دارد :
1. AText : رشته اصلی در این قسمت قرار می گیرد
2. AStart : این قسمت مشخص میکند که بازه حروفی که یک رشته دیگر باید با آنها جایگزین شود ،از چندمین حرف شروع شود !
3. ALength : این قسمت طول بازه حروفی که باید رشته ای دیگر به جای آنها جایگزین شود را مشخص میکند
4. ASubText : این قسمت رشته ای که باید جایگزین شود را مشخص می نماید ...
مثال :
به کد زیر توجه کنید :
var
S, S2, M : String;
begin
S := 'Mahmood';
S2 := 'N';
M := StuffString(S, 2, 3, S2);
end;
در کد بالا در رشته S ، از 2 به طول 3 حرف حذف خواهند شد و رشته S2 به جای آنها قرار خواهد گرفت ( اما نه به تعداد آنها ، فقط یک بار ! )
مقدار متغیر M پس از اجرای این کد برابر با " MNood " خواهد بود ...
تابع RandomFrom :
این تابع یکی از اعضای یک آرایه String را به صورت Random انتخاب می نماید ...
این تابع یک پارامتر با نام AValues دارد که نام متغیر مربوط به آرایه در آن قرار می گیرد ...
مثال :
به کد زیر دقت کنید :
var
S : String;
A : array[1..5] of String = ('M', 'N', 'O', 'P', 'Q');
begin
S := RandomFrom(A);
end;
در کد بالا ، متغیر S یک مقدار تصادفی از بین مقدارهای موجود در متغیر A خواهد گرفت ...
تابع LeftStr :
این تابع تعداد مشخصی از حروف را از سمت چپ یک رشته استخراج میکند ، این تابع دو پارامتر دارد ، اولی با نام AText برای دریافت رشته اصلی و پارامتر دوم با نام ACount برای دریافت تعداد حروف ...
مثال :
اگر متغیرهای S و S2 با نوع String تعریف شده باشند و متغیر S دارای مقدار " Mahmood " باشد، پس از اجرای این تابع در کد زیر ، متغیر S2 دارای مقدار " Mah " خواهد بود :
var
S, S2 : String;
begin
S := 'Mahmood';
S2 := LeftStr(S, 3);
end;
تابع RightStr :
این تابع هم دقیقا مثل تابع LeftStr عمل میکند با این تفاوت که حرف را از سمت راست استخراج میکند ...
پارامترها و مثال هم مانند تابع LeftStr است ...
تابع MidStr :
این تابع هم مانند دو تابع بالا عمل کرده اما چند تفاوت دارد، این تابع از مکانی که برایش مشخص میکنیم عمل استخراج حروف را انجام می دهد ، همچنین این تابع سه پارامتر دارد که به شرح زیر می باشند :
1. AText : مربوط به رشته اصلی است
2. AStart : مکان شروع برداشت را مشخص می نماید
3. ACount : تعداد حروفی که باید برداشت شوند را مشخص می نماید
مثال :
به کد زیر دقت کنید :
var
S, S2 : String;
begin
S := 'Mahmood';
S2 := MidStr(S, 3, 3);
end;
در کد بالا مقدار متغیر S2 برابر با " hmo " خواهد بود ...
خوب ، این قسمت از مقاله هم به پایان رسید ، امیدوارم مفید بوده باشه ...
اگه تونستم و وقتی بود قسمت سوم رو هم مینویسم که احتمالا در مورد توابع مربوط به آوای حروف ( SoundEx و ... ) خواهد بود ...
موفق و پیروز باشید ...