秀丸マクロ: 繰り返し while文の使い方
繰り返しは while 文のみ
秀丸マクロで繰り返し処理を実現する場合、while 文を使います。 他のプログラミング言語でよくある for 文は秀丸にはありません。
while 文は無限ループを発生させてしまう可能性がありますから、 慣れない間は無限ループに注意してプログラミングする必要があります。
while 文
while 文は次のように記述します。
条件式が真の間、{}(波括弧)内の処理を繰り返し実行。
書式
while (条件式) {
// 処理
}
具体的には次のようなコードになります。
// 5回ループ
#i = 0;
while(#i < 5) {
// 処理
#i = #i + 1;
}
while 文の入れ子
while 文を入れ子にすることもできます。
次のコードは外側のループを3回、内側のループを2回実行します。
ループ用のカウンタは外側を #i、内側を #k で管理しています。
// 外側のループ
#i = 0;
while(#i < 3){
// 内側のループ
#k = 0;
while(#k < 2){
#k = #k + 1;
}
#i = #i + 1;
}
while 文の入れ子の応用例として、 タブ区切りの複数行テキストをHTMLのtable形式にするプログラムを作成しました。
サンプルコード: タブ区切りの複数行テキストをHTMLのtableタグに変換
ループを抜け出す break
ループを抜け出すには break文を使います。 2重ループの中でbreak文を使った場合は、 1つ外のループへ抜け出します。
if (条件式) break;
次のループへ continue
次のループへ進む場合は continue 文を使います。
continue文を使う場合は、
ループカウンタの管理に気を付けてください。
場合によっては無限ループを発生させる原因になります。
if (条件式) continue;
複数行の内容を1行ずつ取得
選択された複数行の内容を、1行ずつ取得したい場合は、 split() 関数とwhile 文を使うと実現できます。
split() 関数を使って改行で区切り、 while 文で配列をループします。 コードは次の通りです。
// 範囲選択中でない場合、マクロを終了する
if (selecting == 0) endmacro;
// 選択範囲の文字列を取得(範囲選択を維持しない)
$str = gettext(seltopx,seltopy,selendx,selendy);
// 改行で分割
#num = split($arr, $str, "\r\n");
// 配列のループ
#i = 0;
while (#i < #num) {
// ここに行ごとの処理を記述
message $arr[#i];
#i = #i + 1; // カウンタの ++ を忘れずに
}