文字・数字の表現(定数)

2021/05/18 05:26 Macro::macro 仕様

文字と数字の表し方

Tera Term マクロにおいて、文字や数字を表現するのに、定数と言う言葉を用いています。
C言語における定数が、データの種類と書き方を表しているので、その流用みたいです。

C 言語の定数 (参考)

C言語における定数としては、以下の書き方をしていました。
データの種類書き方備考
整数12310進数で int 型となっています。
01738進数 (10進数で 123) を表します。
0x7B16進数 (10進数で 123) を表します。
符号なし整数1234u
1234U
long型整数1234l
1234L
実数3.14f
3.14F
double型実数12.3456
文字'a'1 byte 文字を表します。
文字列"a"
"abc"
いずれも文字列として扱います。

Tera Term 言語の定数

Tera Term マクロ言語の定数をまとめると、以下のようになります。
データの種類書き方備考
整数12310進数で int 型となっています。
なお、負の整数は、0-x のように 0 からマイナスするか、一旦変数へ代入して利用します。
$7B16進数 (10進数で 123) を表します。
文字#123# から始まる整数で指定します。
文字 #123 および #$7B は、どちらも ASCII コードにおける { を意味します。
ただし ASCII コード 0 の文字 (NUL) は、文字に含められません。
#$7B
文字列'a'どちらのクォーテーションでも、文字列を表します。
"a"
#123'a'#125いずれも、文字列 {a} を表します。
#$7B'a'#$7D
#123"a"#125
#$7B"a"#$7D
実数-Tera Term において、浮動小数点は未サポートです。

なお、このサイト全体としては、定数を「最初に宣言し、値の変化しない変数」の意味で扱っています。

整数型定数

整数型定数の表現

マクロファイルにおける整数型定数は、10 進数または "$" で始まる16進数で表現します。
Tera Term は、浮動小数点が未サポートです。
例:
    123
    -11
    $3a
    $10F

負の整数定数についての注意

コマンドのパラメータに負の整数定数を使用する場合、以下のような問題が発生する場合があります。

例えば、次のコマンドは文法エラーとなります。
for i -10 0
これは、2番めのパラメータが "i" ではなく、"i-10" とみなされるからです。

この問題を防ぐには以下のいずれかの方法をとります。
  1. "-" の前に "0" をつける。
    for i 0-10 0
    
  1. 負の整数定数を変数に代入してから使用する。
    A = -10
    for i A 0
    

文字列型定数

文字列型定数の表現

Tera Term マクロにおいて文字列型定数を表現する方法は、クォーテーションで文字列を囲んで使用するものと、文字をコードで指定するものの 2 つ存在します。
クォーテーションで文字列を囲む方法
値となる文字列の両端を ' か " で囲みます。
文字列の両端には、同じ文字を使用してください。

文字列を構成する文字は、表示可能で囲み文字と異なる文字ならば何でもかまいません。
例:
    'Hello, world'
    "I can't do that"
    "漢字も可能"
なお、どうしても囲み文字と同じ文字を利用したい場合がありますが、Tera Term では囲み文字を \ 等でエスケープすることができません。
このような時は、ASCII コードと組み合わせて対応します。
詳細は、下記項目「組み合わせ」を参照してください。
文字をコードで指定する方法
1 文字を ASCII (または JIS ローマ字、Shift-JIS) コード (10 進数または $ で始まる 16 進数) で表現し、先頭に "#" をつけます。
ASCII コード 0 の文字 (NUL) は文字列定数に含めることができません。
例:
    #65     文字 "A"
    #$41    文字 "A"
    #13     CR 文字
ASCII コードの各数値は ASCII コード を参照してください。
組み合わせ
「クォーテーションで文字列を囲む方法」と「文字をコードで指定する方法」は、組み合わせることが可能です。
例:
    'cat readme.txt'#13#10
    'abc'#$0d#$0a'def'#$0d#$0a'ghi'
囲み文字とASCIIコードの間に、スペースを入れてしまうとシンタックスエラーになります。


・利用例 1 (シングルクォーテーションを利用する)
msg = 'Single quotation '#39'Used'#39
messagebox msg 'Quotation test'

シングルクォーテーション例
シングルクォーテーション例

シングルクォーテーションは、16進数 (#$27) でも利用可能です。

・利用例 2 (ダブルクォーテーションを利用する)
msg = "Double quotation "#34"Used"#34
messagebox msg 'Quotation test'

ダブルクォーテーション例
ダブルクォーテーション例

ダブルクォーテーションは、16進数 (#$22) でも利用可能です。

・利用例 3 (各種コマンド)
send 'cat /etc/hosts'#13#10

fileopen  fhandle 'c:\test.txt' 
filewrite fhandle '---------cut here---------'#13#10
fileclose fhandle
なお、上記の記述方法は、以下の記述方法と同じになります。
sendln 'cat /etc/hosts'

fileopen    fhandle 'c:\test.txt' 
filewriteln fhandle '---------cut here---------'
fileclose   fhandle