#author("2022-06-04T07:09:17+09:00","","") #author("2022-06-09T06:33:31+09:00","","") [[MIFES/マクロ編/ファイルの先頭から最後まで繰り返す(while構文)]]&bigsmile; **ファイルの先頭から最後まで繰り返す(while構文) [#l479e09c] 「マクロ編」で作成したコマンドを、ファイルの先頭から最後まで一括処理するコマンドにするために次の処理を追加して機能アップしましょう。 1:繰り返し処理 2:ファイルの終わりを判別しコマンドを終了する 3:行送り(次の行へ進む) * 繰り返し処理について [#gef84815] ここで、もっとも重要な処理は「繰り返し」です。 繰り返し処理を行う方法にはいくつかありますが、ここではwhile構文を使って繰り返しを行いましょう。 繰り返し処理の図while構文は条件式を記述し、その条件の判定がYes(または「=1」)のときには、while行以下「wend」までの処理を実行し、再びwhile行に戻って判定を行います。結果として、条件が満たされている間、同じ処理を繰り返すことになります。 条件式の判定がNo(または「≠1」)のときにはwendの次の行へジャンプし、それ以降の処理を行います。 &ref(03_1.gif); 今回のコマンドはファイルの最後かどうかの判定により繰り返しを行います。 ファイルの最後かどうかの判断式は次のようになります。 &ref(03_2.gif); しかし、[EOF]は、行頭にある場合(右図A)と、文字の入った行末にある場合(右図B)があり、どちらの場合でも繰り返しを終了する必要があります。 そのため、whileの条件式で行頭に[EOF]があるかを判断し、行末の[EOF] の判定は行頭の文字による実際の処理(【】またはハードタブを挿入)の後で行いbreak文で繰り返しから抜け出すようにします。 A:[EOF]が行頭にある &ref(03_3a.gif); B:[EOF]が行末にある &ref(03_3b.gif); 以上の繰り返し処理と、次の行へ移動する処理を加えるとコマンドの流れ図は次のようになります。 &ref(03_4.gif); * ソースを修正 [#b4f0cdb0] 流れ図をもとにソースを修正すると右のようになります。 ソースの修正ができたら、ソースをファイルに保存し、コンパイルしてみましょう。 コンパイルの手順は「マクロ編 #1 マクロに挑戦!」と同じです。 &ref(03_5.gif); |while~wend :| while直後の式が正しいときはwendまでの処理を実行する。正しくないときは、wendの次の行の処理へジャンプする。| |if~else~endif :| もし(if)~ならば~をし、それ以外の場合(else)は~を行う。| |@byte :| ファイル先頭からのバイト位置を指定すると、その位置にカーソルが移動する。(1を代入するとファイルの先頭にカーソル移動します。)| |@code :| カーソル位置の文字コード。「0xffff」は[EOF]の文字コード。| |delchar :| カーソル位置から()ないで指定した文字数分削除する。| |insstr :| カーソル位置に("")内の文字列を挿入する。| |execmd :| MIFESコマンドを実行する。| |move :| ()内で移動の向きを指定する。")"は行末"d"は1行下、"("は行頭へそれぞれ移動します。| |break :| while~wendを抜け出して、wendの次の行へジャンプします。| * マクロ関連のファイルについて [#s4479cff] MIFES for Windows Ver.7.0には以下の3つのファイルが収録されています。 MIW.LIB MIFES for Windows Ver.7.0のライブラリファイルです。 インストール直後にもいくつかのマクロコマンドが登録されています。 作成したキーボードマクロやオリジナルのマクロコマンドもこのファイルに登録されます。 MIWLIB.MAC MIFES for Windows Ver.7.0のインストール直後のMIW.LIBに登録されているマクロコマンドのソースファイルです。マクロ作成時などに参考にしてください。 MIW.MAC(自動マクロ定義ファイル) 設定により、MIFES起動時にこのファイルに記述したマクロをコンパイルします。 (【設定】-【環境設定】-【起動】タブ-「"MIW.MAC"を起動時にコンパイルする」) 起動時にコンパイルしたマクロは【マクロ】-【指定マクロコマンドの実行】機能で実行することができます。 動作確認中のマクロを記述しておくと、ライブラリに登録することなく、繰り返し実行できます。 // //