他のページでは細かく紹介していなかったループ処理など、よく使うTTLコマンドや処理についてのTipsをまとめました。
尚、Tera Termはバージョンに気をつけないと意図した通りにマクロが動かない場合があるので、もしも業務用途でマクロを作成する予定があるのならば「Tera Termのバージョン、気にしていますか?」を参照してください。
タップできる目次
接続
connect
このTTLコマンドは、TeraTermマクロとTeraTermをリンクするコマンドです。コマンドの結果はシステム変数resultへ格納されます。
connect 'host' if result == 0 then ; TeraTermとリンクされていない elseif result == 1 then ; ホストへ接続していないが、TeraTermとリンクしている elseif result == 2 then ; ホストへ接続していて、TeraTermとリンクしている endif
testlink
testlinkコマンドを実行する事により、リンク状態を調べることができます。testlinkの結果はシステム変数resultへ格納されます。
testlink if result == 0 then ; TeraTermとリンクされていない elseif result == 1 then ; ホストへ接続していないが、TeraTermとリンクしている elseif result == 2 then ; ホストへ接続していて、TeraTermとリンクしている endif
ループ処理
無限ループ
無限ループは、do〜loopで実現できる。
do ; ここに処理を書く loop
別の書き方では “while 1” で実現できる。
while 1 ; ここに処理を書く endwhile
whileとuntilの違い
whileは条件を満たす間ループする。
while result == 0 ; resultの値が0の間、ここの処理を実行する endwhile
untileは条件を満たさない間ループする。
until result == 0 ; resultの値が0でない間、ここの処理を実行する enduntil
for文で指定回数ループする
10回処理を繰り返すには次のようにする。
for i 1 10 ; iの値は1から10まで加算される next
次のfor文も同様に10回処理を繰り返す。
for i 10 1 ; iの値は10から1まで減算される next
do〜loop
doで条件判定する場合と、loopで条件判定する場合とでは動作が異なる。
doで条件判定する場合は、ループ処理に入る前に条件判定を行う。
; 何か処理をする ; resultの値が更新される do while result == 0 ; resultの値を調べてからループに入る ; resultの値によっては1度もループ内の処理が実行されない loop
loopで条件判定する場合は、ループ内の処理を実行後、条件判定を行う。必ず1度はループ内の処理が実行される。
do ; 必ずループ内の処理が1度は実行される loop while result == 0
break
途中でループから抜けるためにはbreakを使用する。breakが書かれているループブロックの外側へ抜ける。
次のマクロを実行するとfor文から抜けるが、do〜loopから抜ける事はできない。
do for i 1 10 if i == 3 then break ; 途中で抜ける endif next ;;; for文のbreakで抜けると、ここへ来てdo〜loopを繰り返す ;;; do〜loopから抜けるためにはここでbreakを書く loop
breakはTera Term 4.53以降でないと使えませんので、注意してください。
continue
ループの先頭に戻るにはcontinueを使用する。continueが書かれているループブロックの先頭へ戻る。
do do ;;; continueを実行すると、ここへ戻る if error == 1 then continue ; doの先頭へ戻る else ; 何か処理する endif loop loop
continueはTera Term 4.77以降でないと使えませんので、注意してください。
配列
文字列配列と数値配列を扱う事ができる。配列を使う場合は、事前に要素数を宣言する必要がある。指定可能な要素数は1〜65536となっていて、添字は0から始まる。
文字列配列を使うためには次のようにする。
strdim strarray 3 ; 3つの要素数を持つ文字列配列を宣言 strarray[0] = 'abc' strarray[1] = 'def' strarray[2] = 'ghi' strarray[3] = 'jkl' ; これはエラー
数値配列を使うためには次のようにする。
intdim intarray 3 ; 3つの要素数を持つ数値配列を宣言 intarray[0] = 123 intarray[1] = 456 intarray[2] = 789 intarray[3] = 123 ; これはエラー
文字列処理
sprintfとsprintf2
2つのTTLコマンドの違いは次の通りです。
- sprintf – 結果がシステム変数inputstrに格納される
- sprintf2 – 結果が指定された変数に格納される
age = 10 name = '太郎' ; システム変数inputstrに「太郎の年齢は10歳です」が格納される sprintf '%sの年齢は%d歳です' name age ; 変数valに「太郎の年齢は10歳です」が格納される sprintf2 val '%sの年齢は%d歳です' name age
フォーマットは文字列ならば「%s」、数値ならば「%d」となります。通常はこの2つのみ知っていれば問題ありません。もっと知りたければTeraTermヘルプを参照してください。
strconcat
2つの文字列変数を連結するためには、strconcatを使用します。次のTTLコマンドは変数xxxに変数yyyの内容を連結します。
xxx = 'abc' yyy = 'def' ; xxxの内容が「abc」から「abcdef」に変わる strconcat xxx yyy
このTTLコマンドをフルパスのファイル名作成に使用する事はおすすめしません。フルパスのファイル名を作成する場合はmakepathをおすすめします。
makepath
このTTLコマンドは、ディレクトリ名とファイル名からフルパスのファイル名を作成します。必要であれば「¥」を自動的に挿入してくれます。
dirname = 'C:¥Users¥taro' filename = 'test.txt' ; 変数fullpathに「C:¥Users¥taro¥test.txt」が格納される makepath fullpath dirname filename
その他のコマンド
yesnobox
ユーザーに判断を委ねる場合はyesnoboxを使用します。
yesnobox 'ここに質問内容を書く' 'ここにタイトルを書く' if result == 0 then ; 「いいえ」ボタンが押された場合の処理 elseif == 1 then ; 「はい」ボタンが押された場合の処理 endif
結果はシステム変数resultに格納されます。
- 0 – 「いいえ」ボタンが押された
- 1 – 「はい」ボタンが押された
inputbox
ユーザーに文字列入力を促す場合はinputboxを使用します。
inputbox 'ここに入力を促すメッセージを書く' 'タイトル' '初期値があればここに書く(無くても良い)'
入力した内容はシステム変数inputstrへ格納されます。
filenamebox
ユーザーにファイル名を選択させる場合はfilenameboxを使用します。
filenamebox 'タイトル' ダイアログボックスの種類(オプション) 初期ディレクトリ(オプション)
ダイアログボックスの種類の種類は2通りあります。指定しない場合は0となります。
- 0 – 「ファイルを開く」ダイアログボックス
- 0以外 – 「ファイル名を付けて保存」ダイアログボックス
初期ディレクトリを指定したい場合はディレクトリを指定します。初期ディレクトリを指定しない場合は空にします。その場合はwindowsの仕様により初期ディレクトリが自動的に決定されます。