秀丸マクロ: 繰り返し 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; // カウンタの ++ を忘れずに }