8.1.1. 外部ファイルの必要性
マクロが育ってくると、外部ファイルを扱う必要性が出てきます。
例えば、IPアドレスの書かれたリストを外部ファイルにしておいて、そこから1行ずつアドレスを読みだしていく場合などがよく使われるやり方です。
他にも実行するコマンドのリストを入れておくなど、外部ファイルをうまく扱うことで、非常に柔軟性の高いマクロが作れるようになります。
8.1.1.1. ファイルの扱い方
ファイルを扱うには、最低でも3つのコマンドを知っておく必要があります。
fileopen、filereadln、filecloseです。
それぞれそこまで難しくはありませんが、少し癖があるので、一つずつ見ていきます。
8.1.1.2. fileopenコマンド
fileopenコマンドにより、外部ファイルを開くことができます。
fileopenコマンドの書き方は以下のとおりです。
1 |
fileopen ファイルハンドル ファイル名 0 |
ファイル名に指定したファイルが正しく開けた場合、ファイルの中身がファイルハンドルに格納されることになります。
最後の値0は他の値を指定することもできますが、0を指定した場合、ファイルの行頭から読んでいくことになります。
8.1.1.3. filereadlnコマンド
fileopenで読んだファイルハンドルから一行読み出します。
1 |
filereadln ファイルハンドル 読み出した行 |
下記のコマンド例では、FHから読んだ一行目をLINEに格納しています。
1 |
filereadln FH LINE |
8.1.1.4. filecloseコマンド
fileopenで開いたファイルをクローズします。
このコマンドを実行した後、ファイルハンドルが無効化されます。
1 |
fileclose FH |
8.1.2. 実際の動きで確認
では、実際にマクロとしてどう動いているかをサンプルを使って確認してみます。
サンプルとして、abc.txtというファイルに下記のようなテキストが含まれているものとします。
abc.txt
1 2 3 |
A B C |
8.1.2.1. マクロにしてみる
下記のサンプルマクロでは、abc.txtというファイルを読むマクロを書いています。
1 2 3 4 |
fileopen FH 'abc.txt' 0 ;abc.txtを読んで、FHに中身を格納する filereadln FH LINE ;FHから一行読みだし、LINEに格納する sendln LINE ;このケースだと、Aがsendlnされる fileclose FH ;FHが無効化される |
1行目で’abc.txt’をfileopenし、FHに全体を格納しています。
2行目でFHをfilereadlnし、LINEに1行目の文字を格納しています。
3行目でLINEをsendlnしています。ここでは、abc.txtの一行目がLINEに格納されているため、LINE=”A”と同じ状態になっています。
4行目でFHをfilecloseしているので、このコマンド以降はFHをファイルハンドルとして使うことができません。
8.1.3. まとめ
外部ファイルを扱うには最低3コマンドが必要です。
fileopen、filereadln、fileclose。
それらの3つがあれば、最低限のコマンド構築が可能です。
今回の外部ファイルの扱いに、これまで学習したifやforを組み合わせることで、同じ動作を何回も行うマクロを作れるようになります。