igimax
کاربر فعال کامپیوتر
- تاریخ عضویت
- 17 سپتامبر 2004
- نوشتهها
- 3,410
- لایکها
- 1,348
- سن
- 49
سلام دوستان عزيز
ممكنه براي مشاهده تصاوير موجود در پستهاي من نياز به اجراي يك هيتلر شكن داشته باشيد!!!
فهرست كامل مقالات آموزشي ماكروها در پست دوم موجود است
آموزش RoboTask -09 دستورات كنترلي 3 - دستورات Loopها
********************************** مقدمه:
. خوب دستورات مربوط به Loopها (حلقه) شامل While Loop و Simple Loop و Windows loop و File Loop و Text Loop و Dataset Loop ميشود. اكثر اوقات ما بيشتر از While/Simple استفاده مينماييم و بر اساس نوع نيازهايمان ممكنه از بقيه هم گه گاهي استفاده نماييم. اساس كار همه حلقهها يكي است، تا زماني كه نتيجه شرط حلقه درست باشد، حلقه به تكرار دستورات درون بلوك خود ادامه خواهد داد.
. ديالوگ باكس (Dialog Box) و پارامترهاي درون آن، دقيقن مشابه دستور IF/Then ميباشد. پس كار ما براي يادگيري و درك نحوه كار اين دستور بسيار راحت ميشود! حلقه While تا زماني كه نتيجه شرط درونش درست باشد دستورات درون حلقه خود را تكرار خواهد نمود. خوب آموزش اين دستور را با مثالهايي ادامه ميدهيم.
*========
* مسئله 18:
=> صورت مسئله:
. ماكرويي بنويسيد كه كاربر در صورت دلخواه آدرس سايتهاي مورد نظر خود را يكي يكي وارد نمايد و برنامه شما Ping هر سايت را چك كرده و عدد آن را به شما نمايش دهد.
=> تفصير صورت مسئله:
. خوب! آنچه مشخص است اين است كه اين برنامه باشد ping آدرس سايتي كه كاربر وارد مينمايد را محاسبه و نمايش دهد. اما تعداد آدرسها مشخص نيست همچنين اصلن ممكنه در همان ابتداي اجراي ماكرو كاربر از انجام چنين كاري منصرف شود!! پس حلقه ما فقط زماني بايد تكرار شود كه كاربر تمايل خود را اعلام نمايد!؟
=> نوشتن كد براي مسئله:
شروع كنيد:
1) Task جديدي را ايجاد و نام PT Sample 18 - Ping some Addresses را براي آن تعيين نماييد.
2) در تب Action دستورات زير را بنويسيد:
=> توضيحات مربوط به كد مسئله:
. با جراي اين برنامه اولين واكنش اين ماكرو نمايش پيغام موجود در خط 4 است، اگر كاربر مايل به تست پينگ باشد برنامه ادامه خواهد يافت در غير اينصورت خير! درون حلقه ابتدا آدرس سايت مورد نظر كاربر پرسيده ميشود. دقت نماييد آدرس سايت را بايد بدون http:// وارد نماييد. سپس ping آدرس داده شده تست و نتيجه در به كاربر نمايش داده ميشود. اينبار سوالي براي تكرار تست آدرسي ديگر پرسيده ميشود!؟ بر اساس پاسخ كاربر تست تكرار يا خاتمه خواهد يافتندي!
=> تست برنامه:
. خوب دوحالت در زير پيشبيني نمودهايم:
1) متغييرها در 3 خط ابتدايي تعريف ميشوند.
2) سوال موجود در خط (4) نمايش داده ميشود. كاربر پاسخ NO را انتخاب ميكند. مقدار False در متغيير DLG_RESULT قرار ميگيرد.
3) در خط (5) شرط حلقه {DLG_RESULT}=True غلط خواهد بود! پس ادامه كنترل برنامه به انتهاي حلقه يعني خط (11) خواهد پريد.
4) متغييرها پاك خواهند شد.
5) برنامه خاتمه مييابد.
. اكنون حالت دوم زماني كه كاربر حال و حوسله بيشتري دارد!!:
1) متغييرها در 3 خط ابتدايي تعريف ميشوند.
2) سوال موجود در خط (4) نمايش داده ميشود. كاربر پاسخ Yes را انتخاب ميكند. مقدار True در متغيير DLG_RESULT قرار ميگيرد.
3) در خط (5) شرط حلقه {DLG_RESULT}=True درست است، پس وارد بلوك حلقه ميشويم و خط (06) اجرا ميشود.
4) در خط (6) ديالوگ باكسي از كاربر خواسته ميشود كه آدرس سايت دلخواه خود را وارد نمايد. كاربر آدرس www.google.com را وارد كرده و در متغيير ADDRESS_FOR_PING قرار ميگيرد.
5) اكنون در خط (7) آدرس موجود در متغيير {ADDRESS_FOR_PING} كه برابر با www.google.com است، پينگ ميشود و نتيجه پينگ در متغيير PING_RESULT قرار ميگيرد.
6) در خط (8) در ديالوگي چند خطي آدرس سايت وارد شده توسط كاربر و عدد پينگ آن نمايش داده ميشود.
7) در خط (9) از كاربر سوال ميشود "آيا مايليد آدرس ديگري را پينگ نماييد؟" كاربر برروي NO كليك ميكند. مقدار False در متغيير DLG_RESULT قرار ميگيرد.
8) در خط (10) مسير اجراي خطوط ماكرو به ابتداي حلقه يعني خط (5) ميپرد!
9) در خط (5) شرط حلقه {DLG_RESULT}=True غلط خواهد بود! پس ادامه كنترل برنامه به انتهاي حلقه يعني خط (11) خواهد پريد.
10) متغييرها پاك خواهند شد.
11) برنامه خاتمه مييابد.
*========
* مسئله 19:
=> صورت مسئله:
. ماكرويي بنويسيد كه پس از دسترسي به اينترنت (چه dial-up چه از طريق LAN و ...) پيغام شما به اينترنت دسترسي داريد را نمايش دهد و در صورت اتمام دسترسي پيغام مناسب را نمايش دهد. اين كنترلها تا زماني كه كاربر بخواهد ادامه داشته باشد.
=> تفصير صورت مسئله:
. خوب چون نوع كنترل دسترسي به اينترنت قراره نا مشخص باشه پس نميشه از Trigger مربوط به Connection Monitorها استفاده نمود. پس تنها راه تشخيص دادن داشتن دسترسي به اينترنت Ping كردن است. فقط در مسئله زير براي كوتاه شدن خطوط ماكرو من فقط براي يك آدرس عمل تست پينگ را انجام ميدهم در صورتي كه حداقل تست 3 آدرس مطمعنتر (حدود 99.99%) يا تست دسترسي به يك سرور FTP ديگه 100% است!
. نكته بعدي اين هست كه كنترلهاي فوق بايد همواره تكرار شوند و فقط در صورت فرمان كاربر بايد ماكرو خاتمه يابد! پس اگر خود كنترل دسترسي داشتن/نداشتن يك حلقه نياز داشته باشد، براي تكرار دوباره كل كنترلها نيز بايد يك حلقه بزرگتر در نظر بگيريم كه حلقه كنترلها درون آن قرار بگيرند. قبلن در دروس قبلي با نام اين حالات حلقه در حلقه آشنا شده بوديم، به آن Nested Loop ميگفتيم.
=> نوشتن كد براي مسئله:
شروع كنيد:
1) Task جديدي را ايجاد و نام PT Sample 19 - Monitoring of Accessing to Internet را براي آن تعيين نماييد.
2) در تب Action دستورات زير را بنويسيد:
=> توضيحات مربوط به كد مسئله:
. خوب! در خط (04) حلقه بيروني و اصلي برنامه قرار دارد كه شرط اجراي آن اين است كه همواره مقدار متغيير DLG_RESULT روي True باشد. درون اين حلقه دو حلقه وجود دارد. اولي بين خطوط (06) تا (09) است و دومي بين خطوط (14) تا (17) است. پارامترهاي First Operand و Second Operand هردو حلقه مشابه هستند. يعني يكطرف متغييري است كه نتيجه پيگ را در خود ذخيره ميكند يعني PING_RESULT و طرف ديگر عدد 0 است. اما نوع مقايسه (Comparison Type) در حلقه اولي علامت كوچكتر ">" است و در دومي علامت بزرگتر مساوي "=<" است.
. در حلقه 6 تا 9، تا زماني كه پينگ سايت -1 يعني غير قابل دسترسي باشد، بلوك حلقه تكرار خواهد شد و در هر 5 ثانيه يكبار پينگ تست ميشود. در صورتي كه نتيجه تست پينگ بيشتر از -1 شود (0 يا بيشتر!) حلقه خاتمه خواهد يافت و پيغام "دسترسي به اينترنت مقدور شد" نمايش داده خواهد شد.
. در حلقه 14 تا 17، زماني به اين لينك خواهيم رسيد كه در حلقه قبلي پينگ بيش از -1 شده و دسترسي به اينترنت اكنون وجود دارد، پس در اين حلقه تا زماني كه پينگ بيشتر يا مساوي 0 باشد بلوك حلقه ادامه خواهد داشت.
. در خوطوط (10) و (18) پيغام دسترسي به اينترنت مقدور شد يا قطع شد نمايش داده ميشود ولي در ادامه سوالي يكسان پرسيده ميشود: "آيا ميخواهيد كه اين ماكرو ادامه يابد؟" در خط 10 لازم بود نتيجه پاسخ كاربر را كنترل كنيم چون وسط حلقه قرار دارد ولي براي خط 18 لازم نيست چون در انتهاي حلقه است و خود دستور While موجود در خط 4 نتيجه سوال فوق را كنترل خواهد نمود.
=> تست برنامه:
. فكر كنم اگر خودتان اين ماكرو را تست كنيد آن را بهتر درك خواهيد نمود!!
. اين حلقه بر خلاف بقيه حلقهها ميزان تكرار نمودن دستورات درون بلوكش از قبل از اجراي حلقه مشخص است! چون در پارامترهاي درون اين حلقه بايد شماره شروع و پايان مشخص شود و شمارش به صورت يكي يكي انجام ميشود. پس اگر شماره شروع 1 و خاتمه 10 باشد اين حلقه به اندازه 1-10+1=10بار تكرار خواهد شد. (چون خود 10 هم است +1 ميكنيم) پس اگر شماره شروع 0 و خاتمه 2 باشد ميشود 2-0+1=3بار و ....
. ما از اين حلقه زماني استفاده مينماييم كه تعداد تكرار حلقه مشخص باشد.
*========
* مسئله 20:
=> صورت مسئله:
. مسئله 17 از آموزش 8 را به كمك Simple Loop باز نويسي نماييد. با اين تفاوت كه در انتهاي پينگ هر 3 سايت، تعداد سايتهاي قابل پينگ شدن را نمايش دهد.
=> تفصير صورت مسئله:
. در اين مثال ما از Array Variable ها استفاده خواهيم نمود. متغييرهاي آرايهاي داراي Index يا شاخص هستند. ما ميتوانيم در يك متغيير چندين مقدار مختلف را ذخيره نماييم. در رياضي ما متغييري كه داراي شاخص هست را به اين شكل ميظنويسيم: مثلن X[SUB]1[/SUB]=10 و X[SUB]2[/SUB]=20 و X[SUB]3[/SUB]=35 همه اينها يك متغيير هستند X ولي بر اساس Index-شان داراي 3 مقدار مختلف هستند. در كامپيوتر و زبانهاي برنامه نويسي ما متغييرهاي آرايهاي را به اين شكل مينويسيم:
. در Robotask يك متغيير آرايهاي را به اين شكل تعريف ميكنيم:
. در اينجا نام متغيير Number و 3 مقدار مختلف آن برابر:
=> نوشتن كد براي مسئله:
شروع كنيد:
1) Task جديدي را ايجاد و نام PT Sample 20 - Is accessing to internet possible را براي آن تعيين نماييد.
2) در تب Action دستورات زير را بنويسيد:
=> توضيحات مربوط به كد مسئله:
. ميبينيد چقدر خطوط كمتر ميشود! دستور Simple Loop هر عدد را كه از قسمت Start From تا To را يكي يكي ميشمارد، عدد فعلي را در متغيير موجود در پارامتر Destination Variable قرار ميدهد. در اينجا متغيير ما نامش COUNTER است و اين متغيير در خط (05) به عنوان شماره Index متغيير آرايهاي SITE_ADDRESSES ميشود.
. با اين حلقه ميتوانيد تك تك خطوط يك فايل متني يا متني كه در درون خود يكي از پارامترهاي خود حلقه كپي ميكنيد را به نوبت و خط به خط خوانده و در درون حلقه هر خط را مورد بررسي قرار دهيد.
. اين حلقه نام تك تك پنجرههاي باز را به درون حلقه خود فرستاده و شما ميتوانيد عمليات مورد نظرتون را برروي آن انجام دهيد. مثلن ميخواهيد تمامي پنجرههاي باز Browser خود را يكي يكي ببنديد.
. با اين حلقه ميشود نام تك تك فايلهاي درون يك فولدر را در درون يك متغيير به درون حلقه فرستاد تا روي آنها كارهايي انجام گيرد. مثلن ميشود آنها را rename نمود يا فايلهاي MP3 را يافته و به فولدر موسيقي منتقل نموده يا ...
. حقيقتش تا الان از اين حلقه استفاده نكردم ولي اگر با SQL آشنايي داريد ميدانيد براي چه منظوري ممكنه به شما كمك كند!
سوال؟ مشق شب 18: ماكرويي بنويسيد كه يك كانكشن را Dial كرده و پس از برقراري ارتباط 3 سايت را Ping نمايد اگر 2 سايت از 3 سايت Pingشان منفي بود كانكشن را قطع نمايد و دوباره كانكت شده و تست فوق انجام شود.
* حلقهها براي تست و انجام يكسري كارها به شكل تكراري برروي دادههايي با نكات مشترك مورد استفاده قرار ميگيرند.
* شرطي كه براي حلقههاي شرطي (همانند While) انتخاب ميكنيد، براي اتمام كار حلقه يا بايد زماني نتيجه آن False شود يا اگر مخصوصن شرطي قرار دادهايد همواره true است به هرحال بايد به كمك يك دستور IF/Then و دستور Break زماني كار آن حلقه را اتمام دهيد. وگرنه حلقه شما يك حلقه بينهايت ميشود!
موفق باشيد.
خداحافظ
IgImAx
90/06/28
فهرست كامل مقالات آموزشي ماكروها در پست دوم موجود است
آموزش RoboTask -09 دستورات كنترلي 3 - دستورات Loopها
**********************************
. خوب دستورات مربوط به Loopها (حلقه) شامل While Loop و Simple Loop و Windows loop و File Loop و Text Loop و Dataset Loop ميشود. اكثر اوقات ما بيشتر از While/Simple استفاده مينماييم و بر اساس نوع نيازهايمان ممكنه از بقيه هم گه گاهي استفاده نماييم. اساس كار همه حلقهها يكي است، تا زماني كه نتيجه شرط حلقه درست باشد، حلقه به تكرار دستورات درون بلوك خود ادامه خواهد داد.
********************************
حلقه While Loop:. ديالوگ باكس (Dialog Box) و پارامترهاي درون آن، دقيقن مشابه دستور IF/Then ميباشد. پس كار ما براي يادگيري و درك نحوه كار اين دستور بسيار راحت ميشود! حلقه While تا زماني كه نتيجه شرط درونش درست باشد دستورات درون حلقه خود را تكرار خواهد نمود. خوب آموزش اين دستور را با مثالهايي ادامه ميدهيم.
*========
* مسئله 18:
=> صورت مسئله:
. ماكرويي بنويسيد كه كاربر در صورت دلخواه آدرس سايتهاي مورد نظر خود را يكي يكي وارد نمايد و برنامه شما Ping هر سايت را چك كرده و عدد آن را به شما نمايش دهد.
=> تفصير صورت مسئله:
. خوب! آنچه مشخص است اين است كه اين برنامه باشد ping آدرس سايتي كه كاربر وارد مينمايد را محاسبه و نمايش دهد. اما تعداد آدرسها مشخص نيست همچنين اصلن ممكنه در همان ابتداي اجراي ماكرو كاربر از انجام چنين كاري منصرف شود!! پس حلقه ما فقط زماني بايد تكرار شود كه كاربر تمايل خود را اعلام نمايد!؟
=> نوشتن كد براي مسئله:
شروع كنيد:
1) Task جديدي را ايجاد و نام PT Sample 18 - Ping some Addresses را براي آن تعيين نماييد.
2) در تب Action دستورات زير را بنويسيد:
o
(01) Variable\Create Variable : [Variable name=DLG_RESULT] [Variable value=False]
(02) Variable\Create Variable : [Variable name=PING_RESULT] [Variable value=0]
(03) Variable\Create Variable : [Variable name=ADDRESS_FOR_PING] [Variable value=]
(04) Dialogs\Question Dialog : [Question text=Do you want to enter a site address for ping test?] [Buttons=Yes/No] [Action=Assign variable] [Assign "True" or ... =DLG_RESULT] [Auto Choice = Cancel/No - after 10 sec]
(05) Loop&Flows\While Loop : [Compare value as=Boolean] [First Op.={DLG_RESULT}] [Second Op.=True]
(06) Dialogs\Input Box : [Prompt String=Please enter a site address for ping test:] [Assigned Entered...=ADDRESS_FOR_PING] [Assigned This ...=www.google.com]
(07) Internet\Ping Host : [Host Name(...={ADDRESS_FOR_PING}] [Assign Reply ...=PING_RESULT]
(08) Dialogs\Show Message/Play Sound : [Message Text=
Ok! the ping test for this address:
{ADDRESS_FOR_PING}
Is:
{PING_RESULT} ms.]
(09) Dialogs\Question Dialog : [Question text=Do you want to enter another site address for ping test?] [Buttons=Yes/No] [Action=Assign variable] [Assign "True" or ... =DLG_RESULT] [Auto Choice = Cancel/No - after 10 sec]
(10) Loop&Flows\End Loop
(11) Variables\Remove Variable : [Variable name=DLG_RESULT]
(12) Variables\Remove Variable : [Variable name=PING_RESULT]
(13) Variables\Remove Variable : [Variable name=ADDRESS_FOR_PING]
i
(01) Variable\Create Variable : [Variable name=DLG_RESULT] [Variable value=False]
(02) Variable\Create Variable : [Variable name=PING_RESULT] [Variable value=0]
(03) Variable\Create Variable : [Variable name=ADDRESS_FOR_PING] [Variable value=]
(04) Dialogs\Question Dialog : [Question text=Do you want to enter a site address for ping test?] [Buttons=Yes/No] [Action=Assign variable] [Assign "True" or ... =DLG_RESULT] [Auto Choice = Cancel/No - after 10 sec]
(05) Loop&Flows\While Loop : [Compare value as=Boolean] [First Op.={DLG_RESULT}] [Second Op.=True]
(06) Dialogs\Input Box : [Prompt String=Please enter a site address for ping test:] [Assigned Entered...=ADDRESS_FOR_PING] [Assigned This ...=www.google.com]
(07) Internet\Ping Host : [Host Name(...={ADDRESS_FOR_PING}] [Assign Reply ...=PING_RESULT]
(08) Dialogs\Show Message/Play Sound : [Message Text=
Ok! the ping test for this address:
{ADDRESS_FOR_PING}
Is:
{PING_RESULT} ms.]
(09) Dialogs\Question Dialog : [Question text=Do you want to enter another site address for ping test?] [Buttons=Yes/No] [Action=Assign variable] [Assign "True" or ... =DLG_RESULT] [Auto Choice = Cancel/No - after 10 sec]
(10) Loop&Flows\End Loop
(11) Variables\Remove Variable : [Variable name=DLG_RESULT]
(12) Variables\Remove Variable : [Variable name=PING_RESULT]
(13) Variables\Remove Variable : [Variable name=ADDRESS_FOR_PING]
i
=> توضيحات مربوط به كد مسئله:
. با جراي اين برنامه اولين واكنش اين ماكرو نمايش پيغام موجود در خط 4 است، اگر كاربر مايل به تست پينگ باشد برنامه ادامه خواهد يافت در غير اينصورت خير! درون حلقه ابتدا آدرس سايت مورد نظر كاربر پرسيده ميشود. دقت نماييد آدرس سايت را بايد بدون http:// وارد نماييد. سپس ping آدرس داده شده تست و نتيجه در به كاربر نمايش داده ميشود. اينبار سوالي براي تكرار تست آدرسي ديگر پرسيده ميشود!؟ بر اساس پاسخ كاربر تست تكرار يا خاتمه خواهد يافتندي!
=> تست برنامه:
. خوب دوحالت در زير پيشبيني نمودهايم:
1) متغييرها در 3 خط ابتدايي تعريف ميشوند.
2) سوال موجود در خط (4) نمايش داده ميشود. كاربر پاسخ NO را انتخاب ميكند. مقدار False در متغيير DLG_RESULT قرار ميگيرد.
3) در خط (5) شرط حلقه {DLG_RESULT}=True غلط خواهد بود! پس ادامه كنترل برنامه به انتهاي حلقه يعني خط (11) خواهد پريد.
4) متغييرها پاك خواهند شد.
5) برنامه خاتمه مييابد.
. اكنون حالت دوم زماني كه كاربر حال و حوسله بيشتري دارد!!:
1) متغييرها در 3 خط ابتدايي تعريف ميشوند.
2) سوال موجود در خط (4) نمايش داده ميشود. كاربر پاسخ Yes را انتخاب ميكند. مقدار True در متغيير DLG_RESULT قرار ميگيرد.
3) در خط (5) شرط حلقه {DLG_RESULT}=True درست است، پس وارد بلوك حلقه ميشويم و خط (06) اجرا ميشود.
4) در خط (6) ديالوگ باكسي از كاربر خواسته ميشود كه آدرس سايت دلخواه خود را وارد نمايد. كاربر آدرس www.google.com را وارد كرده و در متغيير ADDRESS_FOR_PING قرار ميگيرد.
5) اكنون در خط (7) آدرس موجود در متغيير {ADDRESS_FOR_PING} كه برابر با www.google.com است، پينگ ميشود و نتيجه پينگ در متغيير PING_RESULT قرار ميگيرد.
6) در خط (8) در ديالوگي چند خطي آدرس سايت وارد شده توسط كاربر و عدد پينگ آن نمايش داده ميشود.
7) در خط (9) از كاربر سوال ميشود "آيا مايليد آدرس ديگري را پينگ نماييد؟" كاربر برروي NO كليك ميكند. مقدار False در متغيير DLG_RESULT قرار ميگيرد.
8) در خط (10) مسير اجراي خطوط ماكرو به ابتداي حلقه يعني خط (5) ميپرد!
9) در خط (5) شرط حلقه {DLG_RESULT}=True غلط خواهد بود! پس ادامه كنترل برنامه به انتهاي حلقه يعني خط (11) خواهد پريد.
10) متغييرها پاك خواهند شد.
11) برنامه خاتمه مييابد.
*========
* مسئله 19:
=> صورت مسئله:
. ماكرويي بنويسيد كه پس از دسترسي به اينترنت (چه dial-up چه از طريق LAN و ...) پيغام شما به اينترنت دسترسي داريد را نمايش دهد و در صورت اتمام دسترسي پيغام مناسب را نمايش دهد. اين كنترلها تا زماني كه كاربر بخواهد ادامه داشته باشد.
=> تفصير صورت مسئله:
. خوب چون نوع كنترل دسترسي به اينترنت قراره نا مشخص باشه پس نميشه از Trigger مربوط به Connection Monitorها استفاده نمود. پس تنها راه تشخيص دادن داشتن دسترسي به اينترنت Ping كردن است. فقط در مسئله زير براي كوتاه شدن خطوط ماكرو من فقط براي يك آدرس عمل تست پينگ را انجام ميدهم در صورتي كه حداقل تست 3 آدرس مطمعنتر (حدود 99.99%) يا تست دسترسي به يك سرور FTP ديگه 100% است!
. نكته بعدي اين هست كه كنترلهاي فوق بايد همواره تكرار شوند و فقط در صورت فرمان كاربر بايد ماكرو خاتمه يابد! پس اگر خود كنترل دسترسي داشتن/نداشتن يك حلقه نياز داشته باشد، براي تكرار دوباره كل كنترلها نيز بايد يك حلقه بزرگتر در نظر بگيريم كه حلقه كنترلها درون آن قرار بگيرند. قبلن در دروس قبلي با نام اين حالات حلقه در حلقه آشنا شده بوديم، به آن Nested Loop ميگفتيم.
=> نوشتن كد براي مسئله:
شروع كنيد:
1) Task جديدي را ايجاد و نام PT Sample 19 - Monitoring of Accessing to Internet را براي آن تعيين نماييد.
2) در تب Action دستورات زير را بنويسيد:
(01) Variable\Create Variable : [Variable name=DLG_RESULT] [Variable value=False]
(02) Variable\Create Variable : [Variable name=PING_RESULT] [Variable value=0]
(03) Dialogs\Question Dialog : [Question text=Do you want to start "Internet Access Monitoring"?] [Buttons=Yes/No] [Action=Assign variable] [Assign "True" or ... =DLG_RESULT] [Auto Choice = Ok/Yes - after 10 sec]
(04) Loop&Flows\While Loop : [Compare value as=Boolean] [First Op.={DLG_RESULT}] [Second Op.=True]
(05) Internet\Ping Host : [Host Name(...=www.google.com] [Assign Reply ...=PING_RESULT]
(06) Loop&Flows\While Loop : [Compare value as=Number] [First Op.={PING_RESULT}][Comparison Type= < ] [Second Op.=0]
(07) Internet\Ping Host : [Host Name(...=www.google.com] [Assign Reply ...=PING_RESULT]
(08) General\Pause : [Pause=50]
(09) Loop&Flows\End Loop
(10) Dialogs\Question Dialog : [Question text=
You can accessing to internet now!
Do you want to check disconection too?] [Buttons=Yes/No] [Action=Assign variable] [Assign "True" or ... =DLG_RESULT] [Auto Choice = Ok/Yes - after 10 sec]
(11) Loop&Flows\IF Then : [Compare value as=Boolean] [First Op.={DLG_RESULT}] [Second Op.=False]
(12) Loop&Flows\Break
(13) Loop&Flows\End IF
(14) Loop&Flows\While Loop : [Compare value as=Number] [First Op.={PING_RESULT}][Comparison Type= >= ] [Second Op.=0]
(15) Internet\Ping Host : [Host Name(...=www.google.com] [Assign Reply ...=PING_RESULT]
(16) General\Pause : [Pause=50]
(17) Loop&Flows\End Loop
(18) Dialogs\Question Dialog : [Question text=
You can accessing to internet now!
Do you want to check disconection too?] [Buttons=Yes/No] [Action=Assign variable] [Assign "True" or ... =DLG_RESULT] [Auto Choice = Ok/Yes - after 10 sec]
(19) Loop&Flows\End Loop
i
(01) Variable\Create Variable : [Variable name=DLG_RESULT] [Variable value=False]
(02) Variable\Create Variable : [Variable name=PING_RESULT] [Variable value=0]
(03) Dialogs\Question Dialog : [Question text=Do you want to start "Internet Access Monitoring"?] [Buttons=Yes/No] [Action=Assign variable] [Assign "True" or ... =DLG_RESULT] [Auto Choice = Ok/Yes - after 10 sec]
(04) Loop&Flows\While Loop : [Compare value as=Boolean] [First Op.={DLG_RESULT}] [Second Op.=True]
(05) Internet\Ping Host : [Host Name(...=www.google.com] [Assign Reply ...=PING_RESULT]
(06) Loop&Flows\While Loop : [Compare value as=Number] [First Op.={PING_RESULT}][Comparison Type= < ] [Second Op.=0]
(07) Internet\Ping Host : [Host Name(...=www.google.com] [Assign Reply ...=PING_RESULT]
(08) General\Pause : [Pause=50]
(09) Loop&Flows\End Loop
(10) Dialogs\Question Dialog : [Question text=
You can accessing to internet now!
Do you want to check disconection too?] [Buttons=Yes/No] [Action=Assign variable] [Assign "True" or ... =DLG_RESULT] [Auto Choice = Ok/Yes - after 10 sec]
(11) Loop&Flows\IF Then : [Compare value as=Boolean] [First Op.={DLG_RESULT}] [Second Op.=False]
(12) Loop&Flows\Break
(13) Loop&Flows\End IF
(14) Loop&Flows\While Loop : [Compare value as=Number] [First Op.={PING_RESULT}][Comparison Type= >= ] [Second Op.=0]
(15) Internet\Ping Host : [Host Name(...=www.google.com] [Assign Reply ...=PING_RESULT]
(16) General\Pause : [Pause=50]
(17) Loop&Flows\End Loop
(18) Dialogs\Question Dialog : [Question text=
You can accessing to internet now!
Do you want to check disconection too?] [Buttons=Yes/No] [Action=Assign variable] [Assign "True" or ... =DLG_RESULT] [Auto Choice = Ok/Yes - after 10 sec]
(19) Loop&Flows\End Loop
i
=> توضيحات مربوط به كد مسئله:
. خوب! در خط (04) حلقه بيروني و اصلي برنامه قرار دارد كه شرط اجراي آن اين است كه همواره مقدار متغيير DLG_RESULT روي True باشد. درون اين حلقه دو حلقه وجود دارد. اولي بين خطوط (06) تا (09) است و دومي بين خطوط (14) تا (17) است. پارامترهاي First Operand و Second Operand هردو حلقه مشابه هستند. يعني يكطرف متغييري است كه نتيجه پيگ را در خود ذخيره ميكند يعني PING_RESULT و طرف ديگر عدد 0 است. اما نوع مقايسه (Comparison Type) در حلقه اولي علامت كوچكتر ">" است و در دومي علامت بزرگتر مساوي "=<" است.
. در حلقه 6 تا 9، تا زماني كه پينگ سايت -1 يعني غير قابل دسترسي باشد، بلوك حلقه تكرار خواهد شد و در هر 5 ثانيه يكبار پينگ تست ميشود. در صورتي كه نتيجه تست پينگ بيشتر از -1 شود (0 يا بيشتر!) حلقه خاتمه خواهد يافت و پيغام "دسترسي به اينترنت مقدور شد" نمايش داده خواهد شد.
. در حلقه 14 تا 17، زماني به اين لينك خواهيم رسيد كه در حلقه قبلي پينگ بيش از -1 شده و دسترسي به اينترنت اكنون وجود دارد، پس در اين حلقه تا زماني كه پينگ بيشتر يا مساوي 0 باشد بلوك حلقه ادامه خواهد داشت.
. در خوطوط (10) و (18) پيغام دسترسي به اينترنت مقدور شد يا قطع شد نمايش داده ميشود ولي در ادامه سوالي يكسان پرسيده ميشود: "آيا ميخواهيد كه اين ماكرو ادامه يابد؟" در خط 10 لازم بود نتيجه پاسخ كاربر را كنترل كنيم چون وسط حلقه قرار دارد ولي براي خط 18 لازم نيست چون در انتهاي حلقه است و خود دستور While موجود در خط 4 نتيجه سوال فوق را كنترل خواهد نمود.
=> تست برنامه:
. فكر كنم اگر خودتان اين ماكرو را تست كنيد آن را بهتر درك خواهيد نمود!!
********************************
حلقه Simple Loop:. اين حلقه بر خلاف بقيه حلقهها ميزان تكرار نمودن دستورات درون بلوكش از قبل از اجراي حلقه مشخص است! چون در پارامترهاي درون اين حلقه بايد شماره شروع و پايان مشخص شود و شمارش به صورت يكي يكي انجام ميشود. پس اگر شماره شروع 1 و خاتمه 10 باشد اين حلقه به اندازه 1-10+1=10بار تكرار خواهد شد. (چون خود 10 هم است +1 ميكنيم) پس اگر شماره شروع 0 و خاتمه 2 باشد ميشود 2-0+1=3بار و ....
. ما از اين حلقه زماني استفاده مينماييم كه تعداد تكرار حلقه مشخص باشد.
*========
* مسئله 20:
=> صورت مسئله:
. مسئله 17 از آموزش 8 را به كمك Simple Loop باز نويسي نماييد. با اين تفاوت كه در انتهاي پينگ هر 3 سايت، تعداد سايتهاي قابل پينگ شدن را نمايش دهد.
=> تفصير صورت مسئله:
. در اين مثال ما از Array Variable ها استفاده خواهيم نمود. متغييرهاي آرايهاي داراي Index يا شاخص هستند. ما ميتوانيم در يك متغيير چندين مقدار مختلف را ذخيره نماييم. در رياضي ما متغييري كه داراي شاخص هست را به اين شكل ميظنويسيم: مثلن X[SUB]1[/SUB]=10 و X[SUB]2[/SUB]=20 و X[SUB]3[/SUB]=35 همه اينها يك متغيير هستند X ولي بر اساس Index-شان داراي 3 مقدار مختلف هستند. در كامپيوتر و زبانهاي برنامه نويسي ما متغييرهاي آرايهاي را به اين شكل مينويسيم:
X(1) = 10
X(2) = 20
X(3) = 35
X(1) = 10
X(2) = 20
X(3) = 35
. در Robotask يك متغيير آرايهاي را به اين شكل تعريف ميكنيم:
NUMBERS = 1,25,-66
. در اينجا نام متغيير Number و 3 مقدار مختلف آن برابر:
{NUNBERS(1)} = 1
{NUNBERS(2)} = 25
{NUNBERS(3)} = -66
{NUNBERS(2)} = 25
{NUNBERS(3)} = -66
=> نوشتن كد براي مسئله:
شروع كنيد:
1) Task جديدي را ايجاد و نام PT Sample 20 - Is accessing to internet possible را براي آن تعيين نماييد.
2) در تب Action دستورات زير را بنويسيد:
(01) Variable\Create Variable : [Variable name=TOTAL_PINGABLE_SITES] [Variable value=0]
(02) Variable\Create Variable : [Variable name=PING_RESULT] [Variable value=0]
(03) Variable\Create Variable : [Variable name=SITE_ADDRESSES] [Variable value=www.google.com,www.download.com,www.intel.com]
(04) Loop&Flows\Simple Loop : [Start From= 1] [To=3] [Destination Variable=COUNTER]
(05) Internet\Ping Host : [Host Name(...={SITE_ADDRESSES({COUNTER})}] [Assign Reply ...=PING_RESULT]
(06) Loop&Flows\IF Then : [Compare value as=Number] [First Op.={PING_RESULT}][Comparison Type= >= ] [Second Op.=0]
(07) Variable\Increment Variable : [Variable name=TOTAL_PINGABLE_SITES] [Increment by=1]
(08) Loop&Flows\End IF
(09) Loop&Flows\End Loop
(10) Dialogs\Show Message/Play Sound : [Message Text=Total Pingable Sites = {TOTAL_PINGABLE_SITES}]
i
(01) Variable\Create Variable : [Variable name=TOTAL_PINGABLE_SITES] [Variable value=0]
(02) Variable\Create Variable : [Variable name=PING_RESULT] [Variable value=0]
(03) Variable\Create Variable : [Variable name=SITE_ADDRESSES] [Variable value=www.google.com,www.download.com,www.intel.com]
(04) Loop&Flows\Simple Loop : [Start From= 1] [To=3] [Destination Variable=COUNTER]
(05) Internet\Ping Host : [Host Name(...={SITE_ADDRESSES({COUNTER})}] [Assign Reply ...=PING_RESULT]
(06) Loop&Flows\IF Then : [Compare value as=Number] [First Op.={PING_RESULT}][Comparison Type= >= ] [Second Op.=0]
(07) Variable\Increment Variable : [Variable name=TOTAL_PINGABLE_SITES] [Increment by=1]
(08) Loop&Flows\End IF
(09) Loop&Flows\End Loop
(10) Dialogs\Show Message/Play Sound : [Message Text=Total Pingable Sites = {TOTAL_PINGABLE_SITES}]
i
=> توضيحات مربوط به كد مسئله:
. ميبينيد چقدر خطوط كمتر ميشود! دستور Simple Loop هر عدد را كه از قسمت Start From تا To را يكي يكي ميشمارد، عدد فعلي را در متغيير موجود در پارامتر Destination Variable قرار ميدهد. در اينجا متغيير ما نامش COUNTER است و اين متغيير در خط (05) به عنوان شماره Index متغيير آرايهاي SITE_ADDRESSES ميشود.
********************************
حلقه Text Loop:. با اين حلقه ميتوانيد تك تك خطوط يك فايل متني يا متني كه در درون خود يكي از پارامترهاي خود حلقه كپي ميكنيد را به نوبت و خط به خط خوانده و در درون حلقه هر خط را مورد بررسي قرار دهيد.
********************************
حلقه Windows Loop:. اين حلقه نام تك تك پنجرههاي باز را به درون حلقه خود فرستاده و شما ميتوانيد عمليات مورد نظرتون را برروي آن انجام دهيد. مثلن ميخواهيد تمامي پنجرههاي باز Browser خود را يكي يكي ببنديد.
********************************
حلقه File Loop:. با اين حلقه ميشود نام تك تك فايلهاي درون يك فولدر را در درون يك متغيير به درون حلقه فرستاد تا روي آنها كارهايي انجام گيرد. مثلن ميشود آنها را rename نمود يا فايلهاي MP3 را يافته و به فولدر موسيقي منتقل نموده يا ...
********************************
حلقه Dataset Loop::. حقيقتش تا الان از اين حلقه استفاده نكردم ولي اگر با SQL آشنايي داريد ميدانيد براي چه منظوري ممكنه به شما كمك كند!
********************************
مشق شب:********************************
اتمام آموزش 09 و خلاصه اخبار!:* حلقهها براي تست و انجام يكسري كارها به شكل تكراري برروي دادههايي با نكات مشترك مورد استفاده قرار ميگيرند.
* شرطي كه براي حلقههاي شرطي (همانند While) انتخاب ميكنيد، براي اتمام كار حلقه يا بايد زماني نتيجه آن False شود يا اگر مخصوصن شرطي قرار دادهايد همواره true است به هرحال بايد به كمك يك دستور IF/Then و دستور Break زماني كار آن حلقه را اتمام دهيد. وگرنه حلقه شما يك حلقه بينهايت ميشود!
موفق باشيد.
خداحافظ
IgImAx
90/06/28
Last edited: