2019/08/12(月)CSV を strdim 形式の外部ファイルに変換するマクロ

2021/05/21 07:09 Macro::macro サンプル

CSV を strdim 形式の外部ファイルに変換するマクロ

このサンプルマクロは、以下の仕様を満たすものとします。

マクロの目的

アイデアとしては、文字列型配列を CSV 形式で記述したくてマクロを起こしました。

次の意味を持つ各フィールドで区切られた CSV ファイルを strdim で定義された外部ファイルへ変換します。
フィールドの意味入力内容
1列目Environment環境
2列目Protocolアクセスプロトコル
3列目hostnameホスト名
4列目IPaddrIPアドレス
5列目Portポート番号
6列目Usernameアクセスユーザ名
7列目etc備考

また、データの入出力用ディレクトリを、以下のように定義します。
ディレクトリ意味
dat入出力ファイルを格納します。
tmp一時ファイルを出力します。
マクロファイルを置いたディレクトリからの相対パスで指定していることに注意してください。


生成したデータファイルは、別途 include で読み込んで利用する想定です。
include を利用したマクロ利用は 文字列型配列を別ファイルへ外出しする を参照してください。

続きを読む

2019/08/10(土)文字列型配列を別ファイルへ外出しする

2021/05/21 07:01 Macro::macro サンプル

文字列型配列を別ファイルへ外出しする方法

このサンプルマクロは、以下の仕様を満たすものとします。

マクロの目的

外部ファイルに定義した文字列型配列を読み込みます。

文字列型配列は便利なのですが、マクロファイルに埋め込んでしまうとマクロが読みにくくなってしまいます。
そこで include を利用します。

なお、当該マクロは単体で便利なものではなく、組み込んで利用するサンプルになります。

続きを読む

2019/07/26(金)ファイル/フォルダ判定サブルーチン fnChkFile

2021/05/21 06:54 Macro::macro サンプル

ファイル/フォルダ判定サブルーチン fnChkFile

このサンプルマクロは、以下の仕様を満たすものとします。

マクロの目的

指定の変数 <targetname> に格納した文字列が、ファイルなのかディレクトリなのか、以下の戻り値 <result> で出力します。
<result>意味
0対象は存在しなかった。
1対象はフォルダだった。
2対象はファイルだった。

続きを読む

2019/07/24(水)ホスト選択式ログイン自動化マクロ(マスターパスワード利用版)

2021/05/21 06:51 Macro::macro サンプル

ホスト選択式ログイン自動化マクロ(マスターパスワード利用版)

このサンプルマクロは、以下の仕様を満たすものとします。

マクロの目的

選択したホストに対するアクセス情報を保持し、同一ホストに対する 2 回目以降のパスワード入力を回避します。
選択可能なホストは以下の通りとします。

プロトコル想定OS備考
SSHUNIX / LinuxWindows でも sshd サーバを稼働すれば可能。
RDPWindowsLinux でも xrdp 等を稼働すれば可能。
TelnetCisco IOSローカルからアクセスするスイッチングハブ等

また、毎回デフォルト設定で良いか問い合わせ、アクセス情報の変更があった場合も収集情報を保持することとします。
この機能により、アクセス先情報を変更した同一ファイルを複数実行しても、パスワードファイル内でコンフリクトしないようになります。

ただし、保持するアクセス情報はサーバへのログインとは別に、毎回のパスワード入力を必須とします。
この目的のために Tera Term の getpasswd コマンドで作成したパスワードファイルを、暗号化または解凍します。

アーカイブ作成・解凍のための前提アプリに、コマンドライン版 7zip を利用します。
7zip は、GNU LGPL ライセンスによって開発されているアーカイバです。
https://sevenzip.osdn.jp/

続きを読む

エスケープ文字


エスケープ文字

Tera Term マクロに限らずプログラムではエスケープ文字を利用したくなる場面があります。

例えば、シェルで改行文字をエスケープすると、内容によっては長くなってしまう1行も、適切に改行することで見やすいスクリプトになります。
$ cat sample.sh
#!/bin/bash
the_first_value="5"
the_second_value="6"
printf "This sample calculation message %s + %s = %s\n" \
  ${the_first_value} \
  ${the_second_value} \
  $((the_first_value + the_second_value))
$ bash sample.sh
This sample calculation message 5 + 6 = 11
例えば、括り文字 (シングルクォーテーション ' や、ダブルクォーテーション " のこと)をエスケープすると、括り文字の中で括り文字を扱うことができます。
$ echo "This is \"double Quotation\" sample"
This is "double Quotation" sample

結論

結論を言うと、現時点*1において Tera Term にエスケープ文字はありません。

*1 : Tera Term バージョン 4.103

代替方法

エスケープする方法がないため、上記の使用例に対する代替案を記します。

ASCII コードを直指定

括り文字の中に括り文字を利用する場合は、ASCII コードを直に指定する方法があります。
指定方法
ASCII コードを利用
Tera Term で ASCII コードを指定するには、文字に割り振られた番号に # を付与します。

'#' で数値が記述場合、10進数 (0~9) での指定です。
'#$' で数値が記述されている場合、16進数 (0~F) での指定です。

たとえば Tera Term で文字 A を指定する場合、10進数では #65 を、16進数では #$41 を記述します。
ASCII コードで指定可能な文字については ASCII コード を参照してください。
制御文字/印字可能文字に関わらず指定可能です。

・ASCII コードでの代替指定
sprintf "This is "#34"double quotation"#$22
messagebox inputstr 'message test'
ASCII コードでの指定

クォーテーションの種類を変える
厳密にいうと代替方法ではありませんが、シングルクォーテーションの中でダブルクォーテーションを利用することは可能です。
sprintf 'This is "double quotation"'
messagebox inputstr 'message test'
制限事項
上述のような ASCII コード指定する場合は、クォーテーションの中に入れることができません。

・ASCII コードの指定をミスしている例
sprintf "This is #34double quotation"#$22
messagebox inputstr 'message test'
クォートを指定ミスしている例


また、一連の文字列にはスペースを入れることができません。

・ASCII コードが反映されない例
sprintf "This is " #34 "double quotation"#$22
messagebox inputstr 'message test'
反映されない例


スペースも ASCII コードで指定可能なので、以下のように記述します。

・スペース文字を指定した例
sprintf "This is"#32#34"double quotation"#34
messagebox inputstr 'message test'

strconcat

文字列を、何列かに分けて組み立てたい場合は strconcat を利用することで代替できるかもしれません。

もともと strconcat を使っているものを sprintf2 に代替したものが Linux SSH ですが、逆に sprintf2 を strconcat で分解する方法としても参考になると思います。