ایجاد روبات در یاهو

July 2004
  lang=en-us> RoYa (Robot Yahoo) ، کار کسانی که میخواهند در Yahoo Messenger روبات طراحی کنند را آسان میکند ، از RoYa میتوانید برای کنترل از راه دور ، ساختن روباتهای هوشمند ، ساختن سرویس های عمومی و تفریحی ، ساختن سرویسهای ویژه (برای SMS و  ISP ها) و غیره استفاده کرد . کار با RoYa بسیار آسان است و تنها با نوشتن Script و یا  Plugin قادر خواهید بود امکانات مختلفی به روبات اضافه کنید.  و قدرت RoYa در "قابل برنامه ریزی" بودن آن است و به برنامه نویس این امکان را میدهد که بدون توجه به جزئیات اتصال به Yahoo ایده های خود را پیاده سازی کنند.
RoYa به صورت Shareware میباشد  یعنی تا وقتی Register نشده باشد ، به صورت آزمایشی (Trial)  عمل میکند  و نمی توان  از آن به صورت دائمی و حرفه ای استفاده کرد و در آن محدودیتهای در نظر گرفته شده  و در اول برنامه پنجره بمنظور  اینکه نشان دهد این برنامه Register نشده باز میشود.

  Download Now !

توضیح امکانات برنامه

  • امکان پاسخ گویی به پیامهای شخصی PM .

  • امکال اتصال و پاسخگویی در محیطهای گفتگو (ChatRoom) .

  • قابل برنامه ریزی  به وسیله VBScript , JavaScript , DelphiScript .

  • قابل برنامه ریزی به وسیله Plug-in  با زبانهای برنامه نویسی رایج . ( Delphi , VB , VC++ )

  • کنترل برنامه از راه دور به وسیله دستورات مدیریتی.

  • امکان فرستادن بیش از یک پیغام به هر کاربر .

  • امکان استفاده از ID های Profile برای استفاده از روباتهای چند منظوره .

  • امکان عوض کردن Status و پشتیبانی از پیش فرضهای Yahoo.

  • سرعت بالا در دریافت و ارسال پیغامها .

تنظیمات و اتصال

بخش تنظیمات شامل پنجره  Setting میشود که برای تنظیم اولیه RoYa است ، و  قبل از هر کاری اطلاعات آن باید تکمیل شود . این اطلاعات به شرح زیر است :

  • تب Connection
    *
    Host   آدرس  Yahoo Messenger   به طور پیش فرض scsc.msg.yahoo.com است.
    *Port  
    پورت ارتباطی که به طور پپش فرض 5050 است ولی متوانید از پورتهای 21 و 23 هم استفاده کنید.
    در مورد Http Proxy و SOCKS Proxy هم به صورت استاندارد هست و با دادن اطلاعات سرور و پورت میتوانید متصل شوید.
     

  • تب Login
    *
    Username  اسم ID است که قرار است روبات شود .
    *Password
    پسورد ID روبات است.
    *Owner اسم یک ID در Yahoo هست که این ID میتواند از راه دور روبات را کنترل کند میتواند اسم ID اصلی خود شما باشد.
    Status
    هر کلمه که در اینجا نوشته شود ، در لحظه اول در Status روبات نمایش داده خواهد شد   . و اگر Busy فعال باشد علامت busy در کنار اسم روبات نمایش داده میشود ، البته همه مواردی که در مورد سوئیچ /Status بیان شده در اینجا صدق میکند.
    Login under Invisible Mode
    دقیقا مشابه خود Client Yahoo به صورت پنهانی Login میکند و در لیست نمایش داده نمیشود.
    Automatically start RoYa on Windows startup  با اینتخاب این گزینه برنامه در اول Windows اجرا خواهد شد .
    Minimize on tray icon با انتخاب این گزینه وقتی Minimize کنید به قسمت Tray میرود.
    Automatically connect on RoYa startup با انتخاب این گزینه با شروع کار برنامه به Yahoo متصل میشود .
    Priority در این قسمت میتوانید پردازش Plugins  و Scripts را فعال و یا غیر فعال کنید و همچنین میتوانید مشخص کرد که کدام یک اول اجرا شوند در کنار هر یک از دو گزینه Check box وجود دارد که با علامت زدن آن فعال  میشود ، و هر کدام از آیتمها که انتخاب شده باشد  پردازش آن اول انجام میشود . لازم به ذکر است که این فقط پردازش کل Plugin  و Script را کنترل میکند و برای تک تک Plugin ها و Script ها در قسمتهای بعدی توضیح داده شده !
    به صورت پیش فرض هر دو فعال هستند و اولویت با Plugins است.

مواردی که با "*" مشخص شدند ، باید پر شوند.

بعد از وارد کردن اطلاعات خواسته شده در بخش Setting در صورت کامل بودن مشخصات در  Log  نمایش داده میشود . و از این به بعد هر بار برنامه را اجرا کنید این مشخصات برای نشان دادن کامل بودن اطلاعات نمایش داده میشود . و در این لحظه برنامه آماده است و با زدن دکمه Connect به Yahoo متصل شود.  در صورتی که برنامه نتواند به Yahoo متصل شود هر 2 ثانیه سعی میکند این ارتباط را برقرار کند.

For Owner : RoYa loaded.
Date : 24/02/2004 01:29:46

بخش Diagnostic

  • تب Test ، در این بخش شما میتوانید بدون اتصال به اینترنت Script ها و Plugin ها را بررسی کنید ، و در صورتی اشکالی در Script وجود داشته باشد ، شماره خطی که مشکل دارد نمایش داده میشود.

  • تب Editor برای ساختن و ویرایش Script ها می باشد ، که  استاندارهای در آن رعایت شده ، از جمله میتوان به وجود Find (Ctrl + F)  ،  Replace (Ctrl + T)  ، Bookmark  اشاره کرد.

عملکرد برنامه (Log)

RoYa با اولین اجرای خود پوشه در محل نصب خود ایجاد میکند به نام Logs که در این پوشه همه اطلاعاتی که وارد و یا خارج میشود با ذکر زمان دریافت به طور روزانه در فایلهای جداگانه ذخیره میکند ، نام این فایلهای به گونه میباشد که در آن تاریخ ساخت Log ذکر شده بدین صورت : 2003-11-20#RoYa.log و هنگامی که برنامه در حال اجرا باشد و تاریخ سیستم تغییر کند برنامه فایل جدید با تاریخ جدید میسازد  و اطلاعات را در آن ذخیره میکند .

[0]2004-02-24 01:28.16 Log system started.
[0]2004-02-24 01:28.18 Plugin , "Math.dll" Initialization
[0]2004-02-24 01:28.19 Script , "Sample.inc" Initialization
[0]2004-02-24 01:28.19
[0]2004-02-24 01:28.19 == Information ========
[0]2004-02-24 01:28.19 Host: scsa.msg.yahoo.com
[0]2004-02-24 01:28.19 Port: 5050
[0]2004-02-24 01:28.19 Username: pzbot
[0]2004-02-24 01:28.19 Owner: ali_mashatan
[0]2004-02-24 01:28.19 Status:
[0]2004-02-24 01:28.19 Busy: False
[0]2004-02-24 01:28.19 Invisible: True
[0]2004-02-24 01:28.19 ==================
[0]2004-02-24 01:29.36 Connecting to Yahoo! ...
[0]2004-02-24 01:29.46 Welcom to Yahoo Messenger !
[0]2004-02-24 01:30.02 [P][Robot: pzbot ] [User: ali_mashatan ] [Receive: Salam :) ] [Send: salam aziz ]
[0]2004-02-24 01:31.15 [P][Robot: pzbot ] [User: ali_mashatan ] [Receive: salam ] [Send: salam mage doktori?;) ]
[0]2004-02-24 01:31.15 [P][Robot: pzbot ] [User: ali_mashatan ] [Receive: chetoori ? :> ] [Send: Khoobam mer30 , too chetoori ? ]
[0]2004-02-24 01:31.15 [P][Robot: pzbot ] [User: ali_mashatan ] [Receive: chetoori ? :> ] [Send: Ads -> DelphiArea . Http://www.delaphiarea.com ]
[0]2004-02-24 01:35.46 Ping YM!
[0]2004-02-24 01:41.46 Ping YM!
[0]2004-02-24 01:47.46 Ping YM!
[0]2004-02-24 01:53.46 Ping YM!
[0]2004-02-24 01:59.46 Ping YM!
[0]2004-02-24 02:01.56 Socket disconnected !
[0]2004-02-24 02:01.58 Plugin , "Math.dll" Finalization
[0]2004-02-24 02:01.58 Script , "Sample.inc" Finalization
[0]2004-02-24 02:01.58 Log system closed.
 

دستورات مدیریتی


RoYa بگونه ای طراحی شده که میتوانید از راه دور آن را کنترل کنید. برای این منظور دستوراتی وجود دارد که فقط Owner مجاز به وارد کردن آنها میباشد . که در زیر به بیان این دستورات میپردازیم :
تمامی فرامین با یک "/" شروع میشود .

  • /Help نمایش فرامین که در این قسمت وجود دارد.

  • /Reset در مورادی که احتیاج به بستن  و  اجرای  مجدد برنامه است .

  • /Send برای فرستادن پیغام از طرف Robot به یک User ، فقط کافیست در پارامتر اول Username و در پارامتر های بعدی پیغامتان را قرار دهید .

  • /Status برای تغییر محتوای Status بکار میرود. بعد از نوشتن دستور هر جمله نوشته شود در Status  نمایش داده میشود. برای Busy کردن جمله ، از عبارت [b]   و برای Idle از عبارت [i] ، در جمله استفاده کنید.
    همچنین میتوانید از حالتهای پیش فرض Yahoo Messenger استفاده کنید و با دادن کلمات زیر در جلوی دستور حالت مورد نظر نمایش داده میشود. مثلا با قرار دادن #i# حالت Idle نمایش داده میشود. توجه داشته باشید که این قوانین عینا در VarsRoYa.Status هم قابل اجرا است.

#a#   I'm Available
#r#   Be Right Back
#b#   Busy
#h#  
Not at Home
#d#  
Not at my Desk
#o#   Not in the Office
#p#   On the Phone
#v#   On Vacation
#l#   
Out to Lunch
#s#  
Stepped Out
#n#  
Invisible
#i#    Idle
 

  • /Script  برای انجام عملیات بر روی Script است با پارامترهای زیر میتوانید دستورات لازم را بدهید :

  • Init برایInitialization کردن Script

  • Final برای Finalization کردن Script

  • Pri اول Script ها پردازش میشوند

  • ON فعال شدن Script

  • OFF غیر فعال شدن Script

  •  /Plugin برای انجام عملیات بر روی Plugin است با پارامترهای زیر میتوانید دستورات لازم را بدهید :

  • Init برایInitialization کردن Plugin

  • Final برای Finalization کردن Plugin

  • Pri اول Plugin ها پردازش میشوند

  • ON فعال شدن Plugin

  • OFF غیر فعال شدن Plugin

  • /Suspend این دستور همانطوری که از اسمش پیداست باعث معلق شدن کار برنامه میشود و به طور موقت هیچ پردازشی انجام نمیدهد . و هر پیغامی را  Reject میکند . و برای برگشت به حالت عادی باید از دستور  Resume استفاده کنید.
     

  • /Monitor هر پیغامی که توسط RoYa رد و بدل میشود یک نمونه آن برای Owner ارسال میشود و توصیه میکنم بجز موارد خاص از آن استفاده نکنید. با پارامترهای ON و OFF میتوانید فعال و غیر فعال کنید.
     

  • /Uptime این دستور مدت زمان بالا بودن RoYa را نمایش میدهد.
     

  • /Sysinfo این دستور مشخصات کامپیوتری که RoYa روی آن نصب است را نمایش میدهد.
     

  • /Join برای اتصال به یک ChatRoom با دادن نام Chat Room به عنوان پارامتر میتوانید متصل شوید. در ضمن با اتصال به Chat Room لیست Userها در ListUser قرار میگیرد.
     

  • /Left ترک کردن Chat Room
     

  • /Speech ارسال یک پیام به Chat Room
     

  • /Timer برای تنظیم Timer با پارامترهای ON و  OFF میتوانید فعال یا غیر فعال کنید و همچنین با دادن عدد میتوانید مدت زمان Timer را مشخص کنید.
     

  • /Sendtime برای تنظیم زمان ارسال پیغامها ،  این بدین خاطر است که یاهو محدودیت 4 پیام در یک ثانیه دارد (به طور پیش فرض 300 میلی ثانیه و سعی کنید از این دستور کمتر استفاده کنید)
     

  • /Pingtime برای تنظیم زمان Ping به سرور یاهو ، لازم به ذکر است که تمام Client ها که به YM!   متصل میشوند باید در زمان مشخصی به سرور یک ping ی را ارسال کنند در غیر این صورت Yahoo آنها را قطع خواهد کرد. (به طور پیش فرض هر 6 دقیقه هست و سعی کنید از این دستور کمتر استفاده کنید)
     

  • /Cat برای دریافت لیست Chat Room های یک بخش بکار میرود . با دادن شماره هر بخش به عنوان پارامتر و سعی میکند از یاهو لیست را دریافت کند و بعد از دریافت  لیست Chat Room های فعال در ListChat قرار میگیرد و در پارامتر بعد میتوانید مشخص کنید که فقط Chat Room های را دریافت کند که توسط User مشخص شده را انتخاب کند و یا فقط پیش فرض های Yahoo و یا هر دو . به صورت زیر عمل میشود :
    User فقط Chat Room های که توسط User ها درست شدند
    Yahoo
    فقط پیش فرض های خود Yahoo
    ALL
    همه موراد را دریافت میکند
    در صورت قرار ندادن در پارامتر به صورت پیش فرض User در نظر گرفته میشود.
    مثلا : برای اتصال به Asia و لیست شدن Chat Room های که User ها ساختند باید بدین صورت عمل کنید ، /Cat 1600043929 user
    علاوه بر موارد فوق  این Switch قادر است که شماره یک Category را بدست آورد فقط کافیست در پارامتر به جای شماره از اسم Category و یا قسمتی از اسم آن استفاده شود.
    مثلا : /Cat Asia
     

  • /Contact برای ارتباط کاربران با Owner از این Switch استفاده میشود . این Switch برای همه قابل دسترس می باشد و میتوانند پیغامهای خود را برای Owner ارسال کنند فقط Owner میتواند با ON  یا OFF کردن  این امکان را فعال و یا غیر فعال کنند .
     

  • /RoYa نمایش About  برنامه ! (در سرویس Gold این امکان برداشته میشود)


برنامه نویسی با Script


تمام Script ها در پوشه Scripts  در محلی که برنامه نصب شده است قرار میگیرد و باید پسوند فایل آن Inc باشد . برای برنامه نویسی باید ساختار مشخصی در Script رعایت شود .

  • خط اول Script نوع زبان برنامه نویسی قرار دارد .مثلا DelphiScript یا VBScript یا JavaScript

  •  3 تابع SInit , SFina , ProcMessage در Script باید وجود داشته باشد .

در همین پوشه (Scripts) فایلی به اسم Sample.Inc وجود دارد که یک نمونه عملی که با  DelphiScript نوشته شده ، میتوانید با مشاهد آن از چندوچون کار مطلع شوید.
 

  • تابع Sinit در هنگام Initialization شدن Script صدا زده میشود  و یک بار در هنگام بالا آمدن برنامه و یا وقتی که دستور Init صادر شود ، صدا زده میشود . در خروجی تابع (Result) با دادن عدد میتوانید اولویت های Script را مشخص کنید. و هر چه عدد کوچیکتر باشد اولویت آن بیشتر است.
    در این تابع  معمولا میتوانید  Database ی که در Script مورد استفاده قرار میگیرد ، را بار کنید .
     

  • تابع SFina برای Finalization کردن Script بکار میرود ، و یک بار در هنگام بستن برنامه و یا وقتی که دستور Final صادر میشود ، از طرف برنامه صدا زده میشود . مثلا میتوانید برای بستن Database که قبلا باز کردید استفاده کنید .
     

  • تابع ProcMessage  تمام عملیاتهای که در مورد  ، یک بار این تابع  از طرف برنامه صدا زده میشود و با  اطلاعاتی که در  کلاس VarsRoYa قرار دارد .

  اطلاعاتی که در کلاس VarsRoYa به شرح زیر است :

  • عملیاتی
    این تابع ها بصورت متغییر هستند یعنی با وارد کردن رشته در متغییر ،  در همان متغییر جواب قرار میگیرد.

  • FindEmotSing برای در آوردن شکلکها از درون رشته

  • DelEmotSing حدف همه شکلکهای موجود در رشته

  • ورودی

  • Mode  متغییری است که نشان میدهد برنامه چه نوع عملیاتی انجام میدهد و Script با توجه به هر یک از وضعیتهای زیر تصمیم گیری میکند :
     

    • IS_ERROR در صورت بروز خطا در روند اتصال به Chat و همچنین دریافت Category

    • IS_START وقتی برنامه به طور کامل به Yahoo متصل میشود.

    • IS_PM وقتی یک پیام شخصی فرستاده میشود.

    • IS_CHAT وقتی از طرف Chat Room پیامی ارسال میشود.

    • IS_ADD  وقتی که ID روبات را ADD میکند.

    • IS_JOINROBOT وقتی که روبات وارد یک Chat Room میشود

    • IS_JOIN وقتی یک نفر وارد Chat Room میشود

    • IS_LEFT وقتی یک نفر Chat Room را ترک میکند

    • IS_TIMER وقتی  Timer فعال باشد در مدت زمانی که قبلا مشخص شد ، این حالت را فراخوانی میکند. مثلا هر 30 ثانیه یک بار این وضعیت به Script ارسال میشود.

    • IS_CATEGORY وقتی لیست Chat Room ها آماده باشد.
       

  • ListParam برنامه پیغامهای کاربر را با توجه به Space که بین کلمات وجود دارد تفکیک میکند و در ListParam قرار میدهد و این قابلیت وجود دارد  که مطالب که بین گیومه قرار میگیرد به عنوان یک عبارت قرار دهد . تعداد پارامترها در اینجا ListParam.Count قرار دارد.
    مثلا اگر عبارت /Learn hi "Hi , How are you ?"  را کاربر وارد کند برنامه در ListParam بدین صورت قرار میدهد. (در ListParam.Count مقدار 3 هست )
    ListParam.String[0]= /Learn
    ListParam.String[1]=Hi
    ListParam.String[2]=
    Hi , How are you ?  

  • PathPRG مسیر اجرای برنامه

  • Owner    نام Owner

  • IDRobot مشخص میشود که کاربر از کدام ID روبات پیام را ارسال کرده است  ، در رویا این امکان وجود دارد که از ID های Profile برای روباتهای چند منظوره استفاده کنید.

  • UserPM   نام کاربری که پیغام را ارسال کرده

  • StrMsgHTML متن پیغام کاربر به صورت HTML

  • StrMsgNOHTML متن پیغام کاربر به صورت Text

  • خروجی

  • Status  در صورت وارد کردن رشته ای در این متغییر Status عوض میشود .

  • Ban با True شدن ، پیغام برای کاربر ارسال نمیشود .

  • Category برای دریافت لیست Chat Room های Yahoo با دادن شماره هر قسمت.

  • SendStr متنی که قرار است بعنوان جواب برای کاربر ارسال شود در این متغییر قرار میگیرد.

در RoYa سه Object وجود دارد به نامهای  ADOConnection1  و  ADOQuery1 , ADOQuery2 که به وسیله این سه Object میتوانید از طریق  ADO به بانک اطلاعاتی(Database) متصل شوید ، مثل (Access  ، SQL Server , Oracle) دومین مورد متغییرهای برای استفاده برنامه نویسان در Script در نظر گرفته شده که VarInt01 تا VarInt05 برای متغییر های عددی  و از VarStr01 تا VarStr05 برای  String است .
در Sample که در پوشه Script قرار دارد تمام موارد به صورت مثال توضیح داده شده است و در این مثال از بانک اطلاعاتی MS-ACCESS استفاده شده که فایل آن در پوشه Data قرار دارد ( فایلی به نام Sample.mdb). در این Sample علاوه بر جواب دادن به پیامها  PM و Chat چند مورد جالب قرار گرفته :

  • Link Dump  با وارد کردن/Link  لیست لینکهای که قبلا اضافه کردید نمایش داده میشود .  Owner میتواند با دادن /Link add "Name" "Link" لینک اضافه کند و با /Link del <Number> لینک را با توجه به شماره ای که در لیست شدن قرار میگیرد ، حذف کند. تمام اطلاعات در Table:ADS قرار میگیرد.

  • تبلیغات ، این امکان وجود دارد که بین مطالبی که Script جواب میدهد به صورت تصادفی لینکهای که قبلا قرار داده ایم به عنوان تبلیغات ، نمایش داده شود. اطلاعات این قسمت در Table:ADS قرار دارد.

  • ثبت User ها هر کسی که به روبات پیغامی ارسال کند Username آن در Table:User  ثبت میشود. (فقط یک بار)

  • تغییر Status با استفاده از Timer داخلی که در برنامه برای برنامه نویس در نظر گرفته شده جوری برنامه نویسی شده که در مدت زمان مشخص Status را تغییر یابد.

  • برای اتصال به ChatRoom کافیست Owner مثلا  /Cat 1600043929 user وارد کند ، Script به گونه طراحی شده که به طور اتوماتیک با توجه به لیست  کل ChatRoom های Asia داخل هر یک از ChatRoom ها میشود و به پیامها جواب میدهد

برنامه نویسی با Plug-in

Plug-in راه دیگری هست برای توسعه برنامه که میتوانید به وسیله یک DLL کارهای را که با Script انجام میدادید را انجام دهید ، تمام Plugin ها در پوشه Plugins در محلی که برنامه نصب شده قرار دارند و باید پسوند فایل آنها DLL باشد . در صورتی که با Delphi برنامه مینویسید باید یونیت PluginsTyp را در DLL اضافه کنید.

در همین پوشه (Plugins) فایلی به اسم Math.DLL وجود دارد (سورس این برنامه با Delphi نوشته شده و در فایل Math.Dpr قرار دارد ) که نمونه عملی از  یک ماشین حساب قدرتمند که استفاده از Plugin را نشان میدهد  ،  با دستور   /mathو دادن فرمول ریاضی به صورت  پارامتر  میتوانید جواب را مشاهد کنید .
مثلا /math 2+3*(sin(67)/23*89)^(125/5)
تمام مواردی که در مورد Script ذکر شده دقیقا در مورد Plugin هم وجود دارد . فقط باید در نظر داشته باشید که در Plugin از کلاس استفاده نشده است و فقط یک Record است.  و متغییر ها ورودی و خروجی به صورت پارامتر جابجا میشوند.
در ضمن در Plug-in نمی توانید از ADOConnection1  و  ADOQuery1 , ADOQuery2 استفاده کنید.

این متن به مرور تکمیل تر میشود .

قسمت هجدهم

در این جلسه نیز می خواهیم به برخی از توابعی که با آنها کم و بیش سروکار داریم اشاره کنیم .
ابتدا به برخی از توابع کنترل رشته ها می پردازیم :
========================
CompareStr , StrComp : این دو تابع برای مقایسه کردن دو رشته به کار می رود . شکل کلی آن به صورت زیر می باشد :

function StrComp(const Str1, Str2 : PChar): Integer;
function CompareStr(const S1, S2: string): Integer;

- این تابع دو پارامتر رشته ای را دریافت می کند و نتیجه ای صحیح طبق جدول زیر برمی گرداند .

عددی منفی بر می گرداند <0 | Str1< Str2
در صورت برابری صفر بر می گرداند =0 | Str1= Str2
عددی مثبت بر می گرداند >0 | Str1 > Str2

StrCopy : این تابع یک رشته را به در یک رشته دیگر کپی می کند . شکل کلی آن به صورت زیر می باشد :

function StrCopy(Dest: PChar; const Source: PChar): PChar;

پارارمتر Dest رشته ای است که باید در آن عملیات کپی صورت گیرد و پارامتر Source رشته ای است که قرار است کپی شود . این تابع یک مقدار رشته ای بر می گرداند که در واقع همان پارامتر Dest می باشد .

Lenght , StrLen : این دو تابع طول یک رشته را بر میگرداند و در واقع تعداد کاراکترهای یک رشته می باشد . شکل کلی آن به صورت زیر است :

function StrLen(const Str: PChar): Cardinal;
function Length(Str): Integer;

پارامتر Str رشته ای است که قرار است طول آن محاسبه شود .

LowerCase , StrLower : این دو تابع تمام کاراکترهای یک رشته را به کاراکتر کوچک تبدیل می کند. شکل تابع به صورت زیر است:

function StrLower(Str: PChar): PChar;
function LowerCase(const S: string): string;

این تابع یک رشته را به عنوان پارامتر دریافت می کند و پس از تبدیل آن را بر می گرداند .

Pos , StrPos : کار این دو تابع جستجوی یک رشته درون رشته ای دیگر است و به صورت زیر به کار می رود :

function StrPos(const tr1, Str2: PChar): PChar;
function Pos(Substr: string; S: string): Integer;

این تابع دو پارامتر رشته را می گیرد و رشته Str2 را درون رشته str1 جستجو می کند ، در صورتی که رشته پیدا نشود مقدار nil را بر می گرداند .
در مورد تابع Pos در صورت پیدا شدن رشته محل اولین وقوع آن بر گردانده می شود .

UpperCase , StrUpper : این دو تابع نیز تمام کاراکترهای یک رشته را به کاراکتر بزرگ تبدیل می کند. شکل تابع به صورت زیر است:

function StrUpper(Str: PChar): PChar;
function UpperCase(const S: string): string;

این تابع یک رشته را به عنوان پارامتر دریافت می کند و پس از تبدیل آن را بر می گرداند .

Copy : این تابع ، برای جدا کردن زیررشته از یک رشته مورد استفاده قرار می گیرد و به صورت زیر به کار می رود :

function Copy(S : String ; Index, Count: Integer): string;

این تابع سه پارامتر می گیرد و از مکان Index‌ رشته S‌به تعداد Count کاراکتر جدا می کند و زیررشته مورد نظر را بر میگرداند .

روال Delete : این روال قسمتی از یک رشته را حذف می کند .

procedure Delete(var S: string; Index, Count:Integer);

این تابع از کارکتر شماره Index به طول Count از رشته S کاراکترها را حذف نموده و رشته جدید را بر می گرداند .

روال Insert‌ : از این روال برای قرار دادن رشته ای در یک رشته دیگر به کار می رود .

procedure Insert(Source: string; var S: string; Index: Integer);

این روال رشته source را گرفته و در مکان Index از رشته S کپی کرده و رشته جدید S‌ را برمیگرداند .

TrimLeft , TrimRight‌ : این دو تابع یک رشته را گرفته و به ترتیب فضای خالی سمت راست و فضای خالی سمت چپ آن را حذف می کنند.

function TrimLeft(const S: string): string;
function TrimLeft(const S: WideString): WideString;

function TrimRight(const S: string): string;
function TrimRight(const S: WideString): WideString;


روال Str : از این روال برای تبدیل مقدار عددی به رشته عددی به کار می رود و به صورت زیر می باشد :

procedure Str(X [: Width [: Decimals ]]; var S);

این روال مقدار عددی X را گرفته و به مقدار رشته عددی S تبدیل می کند . پارامترهای انتخابی و دلخواه Width و Decimals به ترتیب طول قسمت عددی که قرار است به رشته تبدیل شود و طول قسمت اعشار عدد اعشاری می باشد .
مثال :

var
Num : Integer ;
S : String ;
Num := 125.236 ;
Str(Num : 6 : 2 , S) ;
مقدار S = '125.23'

قسمت هفدهم

در این جلسه می خواهیم به نحوه نوشتن توابع و روال هایی که در یک برنامه نیازمند استفاده از آنها هستیم .
در بیشتر برنامه ها نیازمند این هستیم که عملیات خاصی انجام شود و به طبع آن نتایجی حاصل آید و این عملیات در قسمت های مختلف برنامه چندیدن بار مورد استفاده قرار می گیرند و اگر قرار باشد این کدها چند بار نوشته شود اول اینکه موجب اتلاف وقت شده و ثانیا از کارایی برنامه کاسته می شود به همین خاطر با نوشتن این کدها به عنوان تابع یا زیرروال می توان به دفعات از این کدها در هر جای برنامه که نیاز باشد استفاده کرد .
محل نوشته توابع وروال ها در کد برنامه قبل تمام رویداد ها و بعد از قسمت implementation می باشد .

- نوشتن زیرروال :
Procedure ها یا زیرروال ها برای مواقعی به کار می روند که بخواهیم عملیاتی انجام شوند و نتایجی حاصل شود .
فرم کلی نوشتن روال به صورت زیر می باشد :

Procedure پارامترها)نام روال);
تعریف متغیرها در صورت نیاز
begin
دستور و یا دستورات ;
end ;

- کلمه Procedure یک قسمت ثابت می باشد .
- قسمت پارامترها : در این قسمت لیستی از پارامترهایی است که در صورت نیاز لازم است به روال داده شود تا بر اساس آن متغیرها عملیات خاصی انجام شود .
= نحوه نوشتن پارامترها به صورت زیر می باشد :

(نوع متغیر:نام متغیر ; ...)

نکات :
= پارامترها با کارکتر ; از هم جدا می شوند و در صورتی که چند پارامتر از یک نوع باشند می توان با استفاده کاراکتر , از هم جدا و سپس نوع آنها را ذکر نمود . توجه داشته باشید که ترتیب پارامترها از چپ به راست است .
= این نوع پارامترها را پارامترهای ورودی می گویند یعنی تنها فقط برای ورود اطلاعات به روال می باشد و هیچگونه تغییری در اصل آنها پیدا نمی کنند .
= پارامترهایی داریم به نام ورودی - خروجی یعنی هم برای ورود اطلاعات به کار می روند و هم برای اینکه از روال اطلاعاتی را دریافت کنیم ، برای مشخص کردن پارامتر ورودی - خروجی باید قبل از نام متغیر کلمه کلیدی var را بنویسیم .
= یک روال می تواند بدون پارامتر باشد .

دو مثال ساده :

Procedure Msg(Ok : Boolean) ;
begin
if Ok then
ShowMessage('The parameter is true')
else
ShowMessage('The parameter is false') ;
end ;
----------------------------------
Procedure Set(Ok : Boolean ; var St : String);
begin
if Ok then
St := 'Ok'
else
St := 'Not Ok' ;
end ;

= این روال 2 پارامتر می گیرد ، پارامتر اول از نوع بولی می باشد که به عنوان ورودی عمل میکند و پارامتر دوم که از نوع رشته ای می باشد به صورت ورودی - خروجی عمل می کند . این روال دو پارامتر را می گیرد و بر طبق True و یا False بودن متغیر Ok‌ مقدار متغیر رشته ای St را تنظیم می کند .

نوشتن تابع :
* توابع برای موقعی به کار می روند که بخواهیم پس از انجام عملیاتی خاص نتیجه و مقداری را برای ما بر گرداند .
= فرم کلی نوشتن توابع به صورت زیر می باشد :

Function نوع مقدار بازگشتی : (پارامترها)نام تابع ;
تعریف متغیرها در صورت نیاز
begin
دستور و یا دستورات ;
Result := مقدار برگشتی تابع
end ;

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

یک مثال ساده :

Function Equal(i : Integer) : Boolean ;
var
y : Integer ;
begin
y := 1383 ;
if i=y then
Result := True
else
Result := False ;
end ;

* نحوه فراخوانی و اجرای روال ها و توابع :
- برای اجرای توابع و روال های تنها کافی در جایی از برنامه که نیاز است نام تابع و یا روال مورد نظر را نوشته و در صورت داشتن پارامتر آنها را نیز می نویسیم . به طور مثال :

روال : Msg (True) ;
تابع : var
g : Boolean ;
G := Equal(1382) ;

نکات :
در مورد پارامترها باید ترتیب و نوع پارامترهای وارد شده با ترتیب و نوع پارامترهایی که در معرفی تابع یا روال نوشته شده هماهنگ باشد
در مورد توابع از آنجا که یک مقدار بر می گرداند همانند یک متغیر عمل کرده و می توان آنها را برابر متغیری از نوع خودش قرار داد .
توابع باید حتما مقدار بازگشتی داشته باشند .