【TeraTermマクロ】配列の最適化(値が無い配列を除去)


この記事はプロモーションを含みます。

Linux

TeraTermマクロでは、配列の大きさを動的に変更出来ないため、大きめの配列を作成している人は多いのではないでしょうか。
後続処理でその配列を何度も使用する場合で単純にループさせていると、値の無い配列も何度も参照され無駄に処理時間が増えてしまうと思います。
なので、今回は、値が無い配列を除去して、全ての配列に値が存在するものを作成したいと思います。

ソースコード

このマクロの仕組みです。例として、サイズが10の配列のうちの5つに値を格納しました。
これをループでダイアログを表示させると、空白も読み込まれ、10回ダイアログが表示されます。
後の処理で、[strmatch]を使用し、空白行の配列をスキップして、元の配列に格納しています。
この時点では、先頭から5個に値が入っており、残りの5個が空の配列になっているため、
新しく5個のみ配列を作成し、そちらに詰め替えています。

今回のポイントは、正規表現で空白行の以外の行、
つまり値がある行のみを取得する記述になります。
以下がその記述部分になります。
 strmatch array[i] ‘.+’
 if result != 0 then
  ;処理
 endif

; 配列サイズ
array_num = 10

; 配列初期化
strdim array array_num
array[0] = 'あ'
array[2] = 'い'
array[4] = 'う'
array[6] = 'え'
array[8] = 'お'

; 配列の内容確認(最適化前)
for i 0 array_num - 1
	messagebox array[i] '最適化前'
next

; 値の数を格納する変数
new_array_num = 0
; 値の無い配列を後ろに移動させる
for i 0 array_num - 1
	; 値の無い配列は空白行となるので正規表現で判定
	strmatch array[i] '.+'
	if result != 0 then
		array[new_array_num] = array[i]
		new_array_num = new_array_num + 1
	endif
next

; 全てに値が入った配列
strdim new_array new_array_num
for i 0 new_array_num - 1
	new_array[i] = array[i]
next

; 配列の内容確認(最適化後)
for i 0 new_array_num - 1
	messagebox new_array[i] '最適化後'
next

end

記事は以上になります。

コメント

タイトルとURLをコピーしました