文字・数字の表現(定数)
2021/05/18 05:26
文字と数字の表し方
Tera Term マクロにおいて、文字や数字を表現するのに、定数と言う言葉を用いています。C言語における定数が、データの種類と書き方を表しているので、その流用みたいです。
C 言語の定数 (参考)
C言語における定数としては、以下の書き方をしていました。データの種類 | 書き方 | 備考 |
---|---|---|
整数 | 123 | 10進数で int 型となっています。 |
0173 | 8進数 (10進数で 123) を表します。 | |
0x7B | 16進数 (10進数で 123) を表します。 | |
符号なし整数 | 1234u 1234U | |
long型整数 | 1234l 1234L | |
実数 | 3.14f 3.14F | |
double型実数 | 12.3456 | |
文字 | 'a' | 1 byte 文字を表します。 |
文字列 | "a" "abc" | いずれも文字列として扱います。 |
Tera Term 言語の定数
Tera Term マクロ言語の定数をまとめると、以下のようになります。データの種類 | 書き方 | 備考 |
---|---|---|
整数 | 123 | 10進数で int 型となっています。 |
なお、負の整数は、0-x のように 0 からマイナスするか、一旦変数へ代入して利用します。 | ||
$7B | 16進数 (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" とみなされるからです。
この問題を防ぐには以下のいずれかの方法をとります。
- "-" の前に "0" をつける。
for i 0-10 0
- 負の整数定数を変数に代入してから使用する。
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