# Native Code > برنامه نویسی در Delphi > مقالات مرتبط با Delphi/Win32 >  مقاله : دستکاری رشته ها ( Pos ، Copy ، Delete و ... )

## Mahmood_M

به نام خدا ...
قصد داریم در طی یک مقاله کوتاه روشها و چگونگی استفاده از روشهای دستکاری رشته ها را بررسی کنیم ...
در برنامه نویسی امروز ، دستکاری و تغییر رشته ها ، یکی از چیزهایی است که هر برنامه نویسی باید بداند ...

توابعی که در این مقاله بررسی می کنیم :


[1]Copy(S:<String or Dynamic array>; Index; Count:Integer);
[2]Pos(Substr:String; S:String);
[3]Delete(var S:String; Index:Integer; Count:Integer);
[4]Length(S:String);
[5]Uppercase(S:String);
[6]LowerCase(S:String);
[7]Trim(S:String);


1. تابع Copy :
این تابع مقدار مشخصی از یک رشته را برمی گرداند ... ( خروجی این تابع یک مقدار String است )
این تابع 3 پارامتر دارد :
S : مقدار رشته اصلیIndex : نقطه شروع کپی برداریCount : تعداد حروف برای کپی برداری
مثال :
فرض میکنیم رشته ای با مقدار " Mahmood " داریم و میخواهیم ، مقدار Mahm را از این رشته انتخاب نموده و در یک متغیر قرار دهیم ...
برای این کار تابع Copy را به صورت زیر به کار می بریم :
Copy('Mahmood', 1, 4);
همانطور که مشخص است ، در این تابع نقطه شروع کپی برداری برابر با 1 یعنی حرف M و تعداد حروف برای کپی برداری هم برابر با 4 است که حروف تا حرف " m " کپی می شوند ...
توجه کنید که برای گرفتن رشته حاصل از این تابع باید یک متغیر را برابر با آن قرار دهید ، مثال :
S := Copy('Mahmood', 1, 4);
در کد بالا S یک متغیر String است و مقدار "Mahm" را خواهد گرفت ...

2. تابع Pos :
این تابع موقعیت یک حرف ( یا یک رشته کوچک ) در یک رشته را مشخص مینماید ... ( خروجی این تابع یک مقدار Integer است )
این تابع 2 پارامتر دارد :
Substr : مقدار حرف یا رشته ای که قصد فهمیدن موقعیت آن را داریمS : مقدار رشته ای که حرف یا رشته ما در آن وجود داشته و باید موقعیت حرف مورد نظر ما در آن مشخص شود
توجه :
منظور از موقعیت این است که مثلا حرف مورد نظر ما چندمین حرف رشته اصلی استاگر حرف مورد نظر ما در رشته اصلی موجود نباشد ، این تابع مقدار 0 را برمی گرداند
مثال :
فرض کنیم که میخواهیم بفهمیم در رشته ای با مقدار " Mahmood " حرف " a " چندمین حرف است ...
بدین منظور تابع Pos را به صورت زیر به کار می بریم :
Pos('a', 'Mahmood');
برای این که مقدار این تابع را به دست آورید باید یک متغیر از نوع Integer را برابر با آن قرار دهید ...
نکات مهم :
اگر در این تابع و در پارامتر اول یک رشته چند حرفی وارد نمایید ، این تابع ، موقعیت حرف اول رشته وارد شده شما را بررسی میکنداین تابع به حروف کوچک و بزرگ حساس استاگر دو حروف مانند هم ( از نظر بزگی یا کوچکی ) در رشته اصلی وجود داشته باشد و ما بخواهیم موقعیت آن حرف را پیدا کنیم ، موقعیت اولین حرف از این تابع برگردانده خواهد شد
بهتر است برای نکات بالا چند مثال زده شود :
نکته اول : فرض کنیم که در این تابع و در پارامتر اول شما حروف " Ma " را وارد می نمایید ، و میخواهید موقعیت آن را در رشته ای با مقدار " Mahmood " بدست آورید ، در این صورت مقدار برگشتی تابع Pos ، موقعیت حرف M در رشته اصلی ( " Mahmood " ) خواهد بود ...نکته دوم : اگر در رشته اصلی شما دو حرف ضبیه به هم وجود داشته باشند ولی از نظر بزرگی و حروفی متفاوت باشند ( مثلا در رشته " Mahmood " ، دو حرف "M" و "m" وجود دارند ) ، در این صورت اگر در پارامتر اول تابع Pos ، مقدار "m" را وارد نمایید ، تابع موقعیت حرف M را مشخص *نخواهد کرد* و موقعیت حرف "m" که بعد از "M" وجود دارد را مشخص می نماید ...نکته سوم : اگر ما رشته "Mahmood" را به صورت "MahMood" در تابع Pos به عنوان رشته اصلی به کار ببریم و بخواهیم موقعیت حرف "M" را مشخص نماییم ، تابع Pos موقعیت اولین حرف "M" را مشخص مینماید ...

3.  تابع Delete :
این تابع حرف یا حروف مشخصی را از یک رشته حذف کرده و مقدار رشته باقی مانده را برمیگرداند ( خروجی این تابع یک مقدار String است )
توجه کنید که نمی توانید متغیری را برابر با این تابع قرار دهید ، این تابع تنها حروف مورد نظر را از رشته اصلی حذف مینماید و مقدار رشته ای که به پارامتر اول تابع میدهیم ، بعد از انجام این تابع ، همان مقدار برگشتی تابع خواهد بود ...
این تابع 3 پارامتر دارد :
S : مقدار رشته اصلیIndex : نقطه شروع حروفی که باید حذف شوندCount : تعداد حروفی که باید حذف شوند
نکته مهم :
*در پارامتر اول این رشته نمی توانید مستقیما یک رشته را قرار دهید و باید یک متغیر از نوع رشته را قرار دهید !*

مثال :
فرض کنیم میخواهیم از رشته ای با مقدار " Mahmood " ، حروف "ood" را حذف نماییم ...
ابتدا باید یک متغیر از نوع رشته تعریف کنیم ، سپس ، مقدار متغیر را برابر با "Mahmood" قرار دهیم ، سپس تابع Delete را استفاده نماییم ، به صورت زیر :
var
 S : String;
begin
 S := 'Mahmood';
 Delete(S, 5, 3);
در تابع Delete ، در بالا و در پارامتر دوم ، مقدار 5 که موقعیت حرف "o" است و در پارامتر دوم مقدار 3 که تعداد حروف حذف شونده است قرار گرفته اند ... ، بعد از اجرای این دستورات ، متغیر S ، مقدار "Mahm" را خواهد داشت ...

4. تابع Length :
این تابع ، تعداد حروف یک رشته را برمیگرداند ( خروجی این تابع یک مقدار Integer است )
برای گرفتن مقدار این تابع باید یک متغیر از نوع Integer را برابر با آن قرار دهید ...
مثال :
Length('Mahmood');
مقدار برگشتی تابع بالا مقدار 7 خواهد بود که تعداد حروف تشکیل دهنده رشته "Mahmood" است.

5. تابع UpperCase :
این تابع ، مقدار یک رشته را به صورت حروف بزرگ بر میگرداند ...
مثال :
UpperCase('Mahmood');
تابع بالا مقدار "MAHMOOD" را برمی گرداند ...
برای گرفتن مقدار این تابع باید یک متغیر از نوع String را برابر با آن قرار دهید ...

6. تابع LowerCase :
این تابع ، مقدار یک رشته را به صورت حروف کوچک برمیگرداند ...
مثال :
LowerCase('MAHMOOD');
تابع بالا مقدار "mahmood" را برمی گرداند ...
برای گرفتن مقدار این تابع باید یک متغیر از نوع String را برابر با آن قرار دهید ...

7. تابع Trim :
این تابع ، جاهای خالی اطراف رشته را از بین می برد ، درواقع کارکتر " ' ' " ( فاصله ) را از دو طرف یک رشته حذف میکند ...
مقدار برگشتی این تابع ، همان مقدار داده شده به آن است اما بدون کارکتر فاصله در اطراف آن ...
مثال :
فرض میکنیم رشته ای با مقدار "  Mahmood   " داریم ( اطراف متن فاصله وجود دارد ) و میخواهیم فاصله ها را حذف نماییم ، برای این کار تابع Trim را به صورت زیر به کار می بریم :
Trim('  Mahmood  ');
مقدار برگشتی تابع بالا "Mahmood" است ...
توجه کنید که این تابع کارکتر فاصله ای که در وسط یک عبارت باشد را حذف *نخواهد کرد* ...
نکته در مورد این تابع این است که توابع مشابه ای به نامهای TrimLeft و TrimRight وجود دارند که به ترتیب ، کارکترهای فاصله را از سمت چپ و راست یک عبارت حذف می نمایند ...

پایان ...

امیدوارم مفید بوده باشه ...

موفق باشید ...

----------


## Mahmood_M

با سلام
از آنجایی که بنده علاقه زیادی به بحث رشته ها ( به نوعی پردازش متن ) دارم ، تصمیم گرفتم که قسمت دوم مقاله رو هم بنویسم تا مقاله کاملتر باشه ...

*دستکاری رشته ها ( قسمت دوم )*

در قسمت اول مقاله توابعی نظیر " 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 و ... ) خواهد بود ...

موفق و پیروز باشید ...

----------


## hadisalahi2

پس تابع Replace چی شد؟
حالا با اجازه من این تابع رو معرفی میکنم.
شکل کلی اون به صورت زیر است:

*Replace(*expression*,* find*,* replacewith[*,* start[*,* count[*,* compare]]]*)*

این تابع داخل یک رشته ، یک زیر رشته را جستجو کرده و با رشته مورد نظر ما جایگزین میکند.
رشته یا عیارت ما در قسمت expression قرار میگیرد.
رشته ای که باید جستجو شود در قسمت  find قرار میگیرد.
replacewith : در این قسمت باید رشته ای که جایگزین زیر رشته پیدا شده  است ، قرار میگیرد.
سه پارامتر بعدی اختیاری هستند 
Start : این پارامتر مشخص می کند که شروع جستجو از چندمین حرف رشته آغاز شود . در صورتی که استفاده نشود ، عمل جستجو از اول رشته آغاز میشود .
count : این پارامتر مشخص می کند که عمل جایگزینی رشته چند بار صورت گیرد. در صورت استفاده نکردن از این پارمتر در تمام زیر رشته های پبدا شده رشته جایگزین قرار میگیرد.
compare : این پارامتر نحوه مقایسه را مشخص میکند که یکی از مقادیر زیر را میگیرد.

Constant  Value  Description    vbBinaryCompare
  0
  Perform a binary comparison.
   vbTextCompare
  1
  Perform a textual comparison


در حالت پیش فرض عمل مقایسه بدون حساسیت به حروف کوچک و بزرگ صورت میگیرد(مقدار 1).

----------

