UWSCのループについて教えて下さい

UWSCのループについて教えて下さい。ループの方法や、それぞれの制御文の違いが知りたいです。
ループ、いわゆる繰り返し処理ですが、UWSCにはいくつかの実現方法があります。
参考になる記事を下に記します。

【プログラミング不要】
プログラムを書くことなく、起動時の設定で、処理回数を選ぶ方法
繰り返し処理を行いたいけど制御文が難しい

【プログラミング必要】
FOR-NEXT・・・指定回数の処理を実行する
制御文:FOR-NEXTの解説

WHILE-WEND・・・指定した条件を満たす間、処理を実行する
制御文:WHILE-WENDの解説

REPEAT-UNTIL・・・指定した条件になったら、処理を終了する
制御文:REPEAT-UNTILの解説

繰り返し処理を途中で終了、継続するCONTINUE、BREAK
CONTINUE
BREAK

上記3つの繰り返し処理制御文の使い分けについて
UWSCでFORとかREPEATとか繰り返し処理は何を使うのがベストですか?

その他参考になる、掲示板の投稿
FOR~NEXTでカウント中のカウンター(a)は増やすことは出来ないのでしょうか?

タグ

2013年5月24日 | コメントは受け付けていません。 |

カテゴリー:Q&A

CONTINUE

CONTINUE

REPEAT-UNTIL,WHILE-WEND,FOR-NEXTループの先頭に戻る
CONTINUE [ループ数]

・ループ数・・・多重ループの場合に指定数だけのループの先頭に戻る。省略時は1

ループ中、一部の処理を飛ばしたいときは・・・

BREAKの場合REPEAT-UNTIL,WHILE-WEND,FOR-NEXTのループを途中で抜けてしまいます。
そうではなく、一部の処理だけ飛ばし
またループの先頭に戻りたい場合はどうすればよいのでしょうか。
そんなときにCONTINUEを使います。
簡単な例を見てみましょう。

//通常"A=変数"は10まで出力されますが・・・
FOR A = 1 TO 10
 //6の場合だけ、PRINTによる出力はしたくない、だけどループは続けたい
 IF A = 6 THEN CONTINUE
 PRINT "A=" + A
NEXT

多重ループで、指定ループをCONTINUEさせたい場合は

CONTINUEの書き方で
CONTINUE [ループ数]と言う表現を記載しています。
例えば多重ループというループ文の中にループ文が入れ子にされた状態の場合
CONTINUEだけしか記載していない場合は、
記載してあるループ文で先頭に戻るだけです。
全ループの先頭に戻りたい、2つ上のループに戻りたい場合は
‘CONTINUE ループ数’という表現にしましょう。
2つの多重ループでサンプルをお見せします。

この投稿の続きを読む »

タグ

2012年7月29日 | コメントは受け付けていません。 |

カテゴリー:構文・制御文

BREAK

BREAK

REPEAT-UNTIL,WHILE-WEND,FOR-NEXTのループを中断する
BREAK [ループ数]

・ループ数・・・多重ループの場合に指定数だけのループを抜ける。省略時は1

ループを途中で中断しよう

REPEAT-UNTIL,WHILE-WEND,FOR-NEXTは、条件を満たすまでは処理が繰り返されます。
しかし間にBREAKを入れることで、ループ終了条件前でもループを抜けることができるようになります。
簡単な例を見てみましょう。

//通常"A=変数"は100まで出力されますが・・・
FOR A = 1 TO 100
 PRINT "A=" + A
 //50の場合はBREAKの一文により、途中でループは終了
 IF A = 50 THEN BREAK
NEXT

多重ループを全部抜けるには

BREAKの書き方で
BREAK [ループ数]と言う表現を記載しています。
例えば多重ループというループ文の中にループ文が入れ子にされた状態の場合
BREAKだけしか記載していない場合は、
記載してあるループ文が中断されるだけです。
全部のループを抜けたい、あるいは複数のループを抜けたい場合は
‘BREAK ループ数’という表現にしましょう。
3つの多重ループでサンプルをお見せします。

この投稿の続きを読む »

タグ

2012年7月26日 | コメントは受け付けていません。 |

カテゴリー:構文・制御文

REPEAT-UNTIL

REPEAT-UNTIL

REPEAT-UNTILによるループ処理を行う
REPEAT
処理
UNTIL 条件

・条件・・・判定結果がFalseの場合ループが続き、Trueで終了

最低1回は実施されるループ

REPEAT-UNTILは条件がFalseの結果を返す限り処理を続けるループ文です。
なのでUNTIL FALSEとした場合は、BREAKを入れない限り、無限ループとなります。
FOR-NEXTループと異なり、カウンタは無いため、
自分で用意する必要があります。

//カウンタは自分で用意
CNT = 1
REPEAT
 PRINT "CNT:" + CNT
 CNT = CNT + 1
UNTIL CNT > 100

WHILE同様、状態が変わるまで処理を続ける場合にはREPEAT-UNTIL、但し・・・

REPEAT-UNTILは先に処理が記述され
その後でUNTILの所で、条件判定が行われています。 大事なポイントは、REPEAT-UNTILはループ終了条件だったとしても
最低1回は処理が実行されると言うことです。
WHILE-WENDは条件がTrueの限りループ
REPEAT-UNTILは条件がFalseの限りループ(Trueになったら終了)
という点もご留意下さい。

マウスが移動したら処理を止める

マウスの起動時の位置を記憶しておき、
吹き出し表示という処理を行い続けます。
もし、マウスの位置が移動したら、
処理を終了するというスクリプトを書いてみましょう。
以下のようになります。

この投稿の続きを読む »

タグ

2012年7月19日 | コメントは受け付けていません。 |

カテゴリー:構文・制御文

WHILE-WEND

WHILE-WEND

WHILE-WENDによるループ処理を行う
WHILE 条件
処理
WEND

・条件・・・判定結果がTrueの場合ループが続き、Falseで終了

基本のループ

WHILE-WENDは条件がTrueの結果を返す限り処理を続けるループ文です。
なのでWHILE TRUEとした場合は、BREAKを入れない限り、無限ループとなります。
FOR-NEXTループと異なり、カウンタは無いため、
自分で用意する必要があります。

//カウンタは自分で用意
CNT = 1
WHILE CNT < 100
 PRINT "CNT:" + CNT
 CNT = CNT + 1
WEND

状態が変わるまで処理を続ける場合にはWHILE-WEND

他にもFOR-NEXTやREPEAT-UNTILといったループがあるため
最初はその使い分けが分からないかもしれません。
FOR-NEXTは回数や個数が分かる場合にループに使うケースが多いのに比べ
WHILE-WENDやREPEAT-UNTILは
状態の変化を判別するループに使われることが多いです。
なお、WHILE-WENDは条件判定が処理の前にくるため
判定結果によっては、1度も処理が実施されない場合もあります。

スクリプト起動から5秒経過するまで処理を続ける

スクリプトを起動してから5秒を判定するといっても、いつ起動されるかわからないので
5秒後の時間を指定することもできません。
ここでWHILE-WENDの出番です。
スクリプト起動時の時間を取得し、5秒以上経過するまでを条件に
スクリプトを書いてみましょう。以下のようになります。

この投稿の続きを読む »

タグ

2012年7月18日 | コメントは受け付けていません。 |

カテゴリー:構文・制御文

IEGETDATA

IEGETDATA関数
Web上(IE)より値取得
戻値 = IEGETDATA( IE, Name, [Value, 番号] )
引数
IE
IEオブジェクト
Name
値取得するエレメントのName,もしくはタグ名を記述:”TAG=タグ名”
Value
Nameが共通の場合に Valueを指定する
Nameにてタグ名が指定された場合は、そのタグにての順番を指定
番号: Name, Value が同じ場合に順番指定
戻値
取得の値 (取得できなかった場合はEMPTYを返す)

サンプルページからH3タグを取得してみる

cnt	= 1
IE = CreateOLEObj("InternetExplorer.Application")
IE.Visible = True
IE.Navigate("http://canal22.org/sample0001/")
WHILE IEGETDATA(IE,"TAG=H3",cnt ) <> EMPTY
	PRINT IEGETDATA( IE,"TAG=H3",cnt)
	cnt	= cnt + 1
WEND

解説

WHILE IEGETDATA(IE,”TAG=H3″,cnt ) <> EMPTY
は、返り値が取得できなくなるまで繰り返すことを命令しています。

そしてcntをインクリメントすることで、
IEGETDATA( IE,”TAG=H3″,1)
IEGETDATA( IE,”TAG=H3″,2)
IEGETDATA( IE,”TAG=H3″,3)
・・・

といった具合に、複数のH3タグがあっても順番に表示をするようになっています。

※注意点は、
IEGETSRCはソースの取得、IEGETDATAは値の取得であるということです。
以下のサンプルを実行すると、言わんとすることが明確になります。

この投稿の続きを読む »

タグ

2012年7月17日 | コメントは受け付けていません。 |

カテゴリー:関数一覧

FOR-NEXT

FOR-NEXT

FOR-NEXTによるループ処理を行う
FOR 変数 = 初期値 TO 終了値 [ STEP 刻み値]
処理
NEXT

・変数・・・カウンタ変数
・初期値・・・開始値
・終了値・・・最終値
・刻み値・・・カウンタ変数の1ループあたりの増加数、STEP省略時は1

パラメーターは多いけど使いやすいループ

FOR-NEXTはある処理を繰り返す(ループ処理)場合に便利です。
最初に登場するパラメーターが最低でも3つもあるのが少し戸惑いますが、
慣れてしまえば簡単です。

FOR A = 1 TO 10
 PRINT "A:" + A
 PRINT "->Hello For Next"
NEXT

上記はFOR-NEXTの簡単なサンプルです。
カウンタ変数として「A」に初期値1を設定。
その後、Aが1ループごとに1増加しています。

回数や個数が決まっている場合に便利なループ

他にもWHILE-WENDやREPEAT-UNTILといったループがあるため
最初はその使い分けが分からないかもしれません。
FOR-NEXTはループ回数が決まっている場合や
対象の個数が決まっている場合に使うケースが多いです。
100回実行する(FOR A = 1 TO 100)、
配列や文字数だけ実行する(FOR A = 1 TO LENGTH(TEXT)、FOR A = 0 TO (RESIZE(ARRAY) – 1))、
こう言った場合はFOR-NEXTの出番です。
逆に、状態が変化するまで、処理を続けると言った場合には
WHILE-WENDやREPEAT-UNTILを使います。

STEPの刻み値を利用し、カウンタが減少していくループ

さて、ちょっとだけ応用。
STEPの後に数値を指定することで、カウンタの増加数を自由に決めることができます。
この機能を利用して、カウンタが減少していくスクリプトを作りましょう。
このようになります。

この投稿の続きを読む »

タグ

2012年7月16日 | コメントは受け付けていません。 |

カテゴリー:構文・制御文

繰り返し処理を行いたいけど制御文が難しい

繰り返し処理を行いたいですが、制御文の書き方が難しいです。どうすればいいでしょうか。
制御文を覚える前に、実行回数を設定できる機能を覚えてみましょう。

ある処理を何回か繰り返したい時に制御文は大変便利です。
WHILE-WEND、REPEAT-UNTIL、FOR-NEXT。
この3種類がありますが、書き方や使い分けは
最初のころは難しく感じると思います。


まずはこういった制御文を覚える前に、
実行回数を簡単に設定できる方法があるので
お伝えしましょう。

*

上の図のようにスクリプト・ファイルを開く際に
ファイル名の他に
実行回数が指定可能です。

ここで任意の数を入力すると
その回数だけスクリプトを実行してくれます。

WHILE-WEND、REPEAT-UNTIL、FOR-NEXTは、
どの文でも繰り返し処理は実行できます。

どの制御文も微妙な差異がありますので
用途に応じて使い分けるのがいいでしょう。

簡単なスクリプトでその違いを見てみます。

この投稿の続きを読む »

タグ

2012年3月3日 | コメントは受け付けていません。 |

カテゴリー:Q&A

このページの先頭へ