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

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

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

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

マクロの目的

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

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

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

利用可能環境

Teraterm
依存する Tera Term バージョン:Tera Term 4.67 以降*1

利用する Tera Term コマンド:
種別:制御Ver機能の簡易説明
for,next繰り返す。
includeインクルードファイルに移る。
種別:文字列操作Ver機能の簡易説明
str2int文字列を整数値に変換する。
strsplit4.67以降文字列を分割する。
種別:ファイル操作Ver機能の簡易説明
filecloseファイルハンドルを閉じる。
fileopenファイルを開く。
filereadlnファイルから一行読む。
種別:その他Ver機能の簡易説明
messageboxダイアログボックスを開き、ユーザーにメッセージを知らせる。
4.54以降特殊文字の解釈を制御するオプションの追加。
4.60以降キャンセル時にマクロ停止を確認する機能の追加。

マクロの使い方

実行タイミング
任意のタイミングで実行可能です。
マクロの指定方法
詳細は TeraTerm マクロの使い方 を参照してください。
ttpmacro.exe を利用する場合
ファイルの拡張子 .ttl を ttpmacro.exe へ関連付けしておきます。
.ttl ファイルをダブルクリック等で実行します。

ただし、当該マクロは、単体で便利なものではなく、組み込んで利用するサンプルになります。
ttermpro.exe を利用する場合
ttermpro.exe を利用する場合は、起動時にオプションへ /M=xxx.ttl のように指定します。

ただし、当該マクロは、単体で便利なものではなく、組み込んで利用するサンプルになります。
メニューから実行する場合
Tera Term メニューから「コントロール(O)」→「マクロ(M)」を選択します。
対象ファイルを選択して「開く」ボタンをクリックすると、実行されます。

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

*1 : 保存する文字コードによっては Tera Term バージョン 4.102 以降

コード

著作権情報

このサンプルマクロに関する著作権は、当サイト管理者が所有しています。
著作権者
神場 和也
ライセンス
3条項BSDライセンス
関連情報
(なし)

サンプルコード

ファイルダウンロード
readexampledata.zip

※ 解凍してご利用ください。
項目内容
文字コードShift JIS
実行確認バージョンTera Term Ver 4.103
備考下記コピペ用ソースコードをファイルに保存したものです。
コピペ用
以下のソースコードをファイルに保存のうえご利用ください。

※ UTF-8 で保存した場合は、Tera Term Ver 4.102 以降で実行する必要があります。詳細は マクロファイルの仕様 を参照してください。

・文字列型配列の定義ファイル example.dat
strdim example 5
example[0] = '192.168.0.1'
example[1] = '192.168.0.2'
example[2] = '192.168.0.3'
example[3] = '192.168.0.4'
example[4] = '192.168.0.5'

・example.dat を読み込むマクロ 理論実証版
想定ファイル名:readexampledata_a.ttl
; ssh2 login macro of Tera Term
;
; File: readexampledata_a.ttl
; Description: example.dat を読み込むマクロ 理論実証版
; Environment: generic
; Update: 2019/8/10
; Author: Kazuya Jimba

;;; 環境変数設定 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


;;; メイン処理 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

include 'example.dat'

for i 0 4
  messagebox example[i] 'strdim'
next

;;; 終了処理 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

end

上記の場合、最大値を手入力で管理する必要があります。
なので最大値だけは取得するようにしてみます。
これを行うメリットは、外だししたファイルの記述内容だけ気を付ければ、本体の修正を行う必要性を減らせる*2 ことです。


・example.dat を読み込むマクロ
想定ファイル名:readexampledata_b.ttl
; ssh2 login macro of Tera Term
;
; File: readexampledata_b.ttl
; Description: example.dat を読み込むマクロ
; Environment: generic
; Update: 2019/8/10
; Author: Kazuya Jimba

;;; 環境変数設定 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

DatFile = 'example.dat'

;;; メイン処理 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;; strdim のデータサイズを取得する

fileopen fhandle DatFile 0
filereadln fhandle fline

; コマンド "strdim <array> <size>" を分割する。
strsplit fline ' ' 3

; 取得した <size> は文字なので、数値に置換する。
str2int _Max_Count groupmatchstr3

fileclose fhandle

;; ファイルを読み込む

include DatFile

for i 0 (_Max_Count - 1)
  messagebox example[i] 'strdim'
next

;;; 終了処理 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

end

備考

include で読み込まれるファイルは 1 行ずつ解釈されるため実行速度が遅くなる可能性があります。
詳細は include の備考を参照してください。

*2 : 本体での書き方次第では、返って手間になることもあります。