Tera Termの最新バージョンは4.105です

Tera Termマクロでよく使われるTTLコマンドTips

他のページでは細かく紹介していなかったループ処理など、よく使う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の仕様により初期ディレクトリが自動的に決定されます。

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)