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日 | コメントは受け付けていません。 |

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

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日 | コメントは受け付けていません。 |

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

指定回数を繰り返す(FOR)

FOR 変数 = 初期値 TO 終了値 [STEP 刻み値]
 

処理

NEXT       // NEXTの後に変数を書いてはダメ

「変数」が「初期値」から「終了値」の条件を満たす限り、
繰り返し処理を行います。
1回実行するたびに「刻み値」分だけ「変数」の値は増加していきます。
※刻み値を省略した場合は、変数は1づつ増加します。

FOR~NEXTはかなり使用頻度の高い制御文です。

「UWSC大好き」と100回表示するサンプル

FOR KAISU = 1 TO 100
	PRINT "UWSC大好き"
NEXT

「変数」であるKAISUを処理で使用することも可能です。

KAISUの増加を確認するサンプル

FOR KAISU = 1 TO 100
	PRINT KAISU
NEXT

STEPの増加を確認するサンプル

この投稿の続きを読む »

タグ

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

カテゴリー:逆引き関数

ランダムな文字列をメモ帳に書き出したい

ランダムな文字列をメモ帳に書き出したい
IDやパスワードなどを生成する際に、
意味を持たないランダムな組み合わせの文字列にしたい事があります。

テストデータを作ったり、全く想定できないパスワードを作る際に利用します。
一つ、二つ程度ならばガチャガチャとキーボードを叩けば作れますが
何十個も作るとなると、ちょっと大変ですね。
そんな問題をUWSCで解決してみましょう。


8文字のランダムな文字列10個をメモ帳に書き出してみます。

IDPASS = ""
//文字列10個出力
FOR A = 1 TO 10
    //文字数は8文字
    FOR B = 1 TO 8
       IDPASS = IDPASS + RETURNCHAR()
    NEXT
    IDPASS = IDPASS + "<#CR>"
NEXT
SENDSTR(EXEC("NOTEPAD"),IDPASS)

FUNCTION RETURNCHAR()
SELECT RANDOM(26)
CASE 0
RESULT = "a"
CASE 1
RESULT = "b"
CASE 2
RESULT = "c"
CASE 3
RESULT = "d"
CASE 4
RESULT = "e"
CASE 5
RESULT = "f"
CASE 6
RESULT = "g"
CASE 7
RESULT = "h"
CASE 8
RESULT = "i"
CASE 9
RESULT = "j"
CASE 10
RESULT = "k"
CASE 11
RESULT = "l"
CASE 12
RESULT = "m"
CASE 13
RESULT = "n"
CASE 14
RESULT = "o"
CASE 15
RESULT = "p"
CASE 16
RESULT = "q"
CASE 17
RESULT = "r"
CASE 18
RESULT = "s"
CASE 19
RESULT = "t"
CASE 20
RESULT = "u"
CASE 21
RESULT = "v"
CASE 22
RESULT = "w"
CASE 23
RESULT = "x"
CASE 24
RESULT = "y"
CASE 25
RESULT = "z"
default
RESULT = "a"
SELEND
FEND

UWSCのRANDOM関数(0~指定数字未満のどれかを返す)を使って
ランダムな数値を取り出し、その数値をアルファベットに変換します。
それを8文字×10個繰り返すという、
非常にわかりやすいスクリプトです。


これだとちょっと冗長だと思う方はもう少し短くしてみましょう。


文字にはすべてASCIIコードという値が割り当てられています。
そしてUWSCには文字とASCIIコードを変換する関数があります。

UWSCでは「a」のASCIIコード97は、「z」のACIIコードは122となっています。
このACIIコード表を見ればわかるように「a」から「z」まで順番に97から122と数値が割り当てられていますので
この仕組みを利用しましょう。

IDPASS = ""
//文字列10個出力
FOR A = 1 TO 10
    //文字数は8文字
    FOR B = 1 TO 8
       IDPASS = IDPASS + RETURNCHAR()
    NEXT
    IDPASS = IDPASS + "<#CR>"
NEXT
SENDSTR(EXEC("NOTEPAD"),IDPASS)

FUNCTION RETURNCHAR()
RESULT = CHR(97 + RANDOM(26))
FEND

だいぶスッキリしました。

では、もう少し要件が細かくなった場合はどうしましょうか。
例えば、下記に対応するのはどうでしょう。
(1)アルファベットの大文字も利用したい
(2)数字も利用したい
(3)5文字のIDと10文字パスワードをセットで10個出したい
(4)IDの先頭文字に数字は使いたくない

複雑そうに見えますが、1つ1つ組み立てていきましょう。

この投稿の続きを読む »

タグ

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

カテゴリー:Q&A

このページの先頭へ