目次
条件を満たすまで(条件式がFalseの間)処理を繰り返します。繰り返す回数がわかっている場合はFOR-TO文を使います。
- 構文
- REPEAT
処理UNTIL 式
- 引数
- 戻り値
後判定ループ
REPEAT文のようにループ処理を行ってから、繰り返しを終了するかの条件判定を行う方式を後判定ループといいます。
ループの処理を行ってから判定を行うため、前判定ループとは違いループ内の処理が必ず一度は実行されます。
対して、WHILE文のように繰り返し処理を行う前に条件判定を行う方式を前判定ループといいます。後判定ループと違い、条件判定が成り立たない場合ループ内の処理は一度も実行されません。
REPEAT文は後判定でループ内の処理を実行してから条件式の確認を行うので、WHILE文とは違い最低でも一回は処理が実行されます。
例えば入力されたパスワードが正しいかを判定する場合、一度は入力してもらう必要があるため後判定を使い以下のように記述します。
REPEAT
DIM str = INPUT("パスワードを入力")
UNTIL str = "1234"
これを前判定のWHILE文を使って書くと以下のようになり、同じプログラムを無駄に2回書くことになります。またREPEAT文は条件式が成り立たない間繰り返すのに対しWHILE文は成り立つ間なので、条件式の符号も変わることに注意です。
DIM str = INPUT("パスワードを入力")
WHILE str <> "1234"
str = INPUT("パスワードを入力")
WEND
条件式の書き方
条件式は比較演算子または論理演算子を使って書きます。
値の比較
REPEAT文では条件が真になるまで(偽の間)ループ内の処理が行われます。a,bには数値が代入されているものとします。
比較演算子とは2つの式や値を比較するための演算子で、2つの値が等しい・等しくない、大きい・小さいといった比較ができるようになります。
比較演算子を使うことで、○○と一致したときや○○ではないときといった条件式を書くことができます。
UWSCで使える比較演算子は以下のとおりで、a,bはともに数値が代入されているものとします。
演算子 | 記述例 | 意味 |
---|---|---|
< | a < b | aがbより小さければ真 |
<= | a <= b | aがb以下ならば真 |
> | a > b | aがbより大きければ真 |
>= | a >= b | aがb以上ならば真 |
= | a = b | aとbが等しければ真 |
<> | <> b | aとbが等しくなければ真 |
複数条件
複数の条件を指定する場合は、論理演算子を使います。
以下の例ではa,bともに論理値(TrueまたはFalse)が代入されているものとします。数値の場合はビット演算になるので注意が必要です。
論理演算子とは、論理演算をするための演算子のことで、論理演算子を使うことで○○かつ○○、○○または○○といった比較演算子だけではできない複数の条件式を比較するといった書き方ができるようになります。
以下の例ではa,bともに論理値(TrueまたはFalse)が代入されているものとします。数値の場合は論理演算ではなくビット演算になるので注意が必要です。
演算子 | 記述例 | 意味 |
---|---|---|
AND | a AND b | aとbがともに真の場合に真 |
OR | a OR b | aかbの少なくとも1つが真の場合に真 |
XOR | a XOR b | aかbのいずれか一方が真の場合に真 |
! | !x | xが偽の場合に真 |
使い方
指定時間の間ループ内の処理を実行
ループに入る前の時間を取得しループの最後で経過時間を求め、指定時間になるまでループ内の処理を繰り返し処理を実行します。
以下は60秒間ループ内の処理を実行する例です。tm >= 60は60秒経過していたらループを抜けることを表しています。60秒経っていなかったら再度REPEAT文の先頭に戻ります。
DIM t = GETTIME()
REPEAT
// 何らかの処理
DIM tm = GETTIME() - t
UNTIL tm >= 60
指定画像が表示されるまで待機
image.bmpという画像が表示されるまで待機します。
CHKIMG関数 (スクリプト関数)は画像が見つかればTrue、見つからなければFalseを返すことを利用しています。
REPEAT
SLEEP(0.01)
UNTIL CHKIMG("image.bmp")
入力チェック
INPUT関数 (スクリプト関数)で入力された値をreTest関数 (自作関数)で正規表現チェックを行い、数値が入力されるまで繰り返します。
正規表現にマッチすればTrue、マッチしなければFalseを返すので、数値が入力されるまで繰り返し入力させることができます。
REPEAT
DIM str = INPUT("整数を入力してください。")
UNTIL reTest(str, "\d+")
PRINT str
//////////////////////////////////////////////////
// 【引数】
// str : 正規表現による検索の対象となる文字列
// Pattern : 正規表現で使用するパターンを設定
// IgnoreCase : 大文字・小文字を区別しない場合はTrue、区別する場合はFalse
// Global : 文字列全体を検索する場合はTrue、しない場合はFalse
// 【戻り値】
// 正規表現にマッチするかどうかを示すブール値
//////////////////////////////////////////////////
FUNCTION reTest(str, Pattern, IgnoreCase = TRUE, Global = TRUE)
DIM re = CREATEOLEOBJ("VBScript.RegExp")
re.Pattern = Pattern
re.IgnoreCase = IgnoreCase
re.Global = Global
RESULT = re.Test(str)
FEND
指定URLになるまで待機
Web操作でログイン処理する際、ロボット認証などプログラムでの操作ができないときに待機する例。メールアドレスやパスワードなどを入力した後にこの処理を入れておくと、ロボット認証・ログインボタンだけは手動で行うということができます。URLはログインボタンを押したあとに遷移するURLを指定します。
以下は、URLがhttp://example.comになるまで待機します。
REPEAT
SLEEP(0.001)
UNTIL IE.Document.url = "http://example.com"